Java之路——名詞解釋(一)。本站提示廣大學習愛好者:(Java之路——名詞解釋(一))文章只能為提供參考,不一定能成為您想要的結果。以下是Java之路——名詞解釋(一)正文
一、開篇
許多人在初接觸Java的時候,都會被各種Java的英文縮寫名詞給弄得頭暈腦脹。看一個技術,內容裡又會有一堆其他的技術名詞,看了半天不知所雲。嘗試去查一下這些名詞的解釋,除了非常學術性的解釋之外,很少會有更詳細更明白的描述。例如JNDI,也就是Java Naming and Directory Interface的縮寫,中文意思是Java命名和目錄接口[1]。看完中文解釋,裡面就有三個不懂的名詞,"命名"、"目錄"和"接口",這都什麼意思?然後繼續深入查一下去,越看發現越多不懂,學習的興趣也就沒有了。本文希望能通過簡單的說明和舉例,將平時工作中經常遇到的名詞進行解釋,讓初學者能對其有一個更感性的認識。
牽涉Java的名詞有很多,有中文,有英文,有跟Java語言有關,有跟Java技術體系有關,要全面歸納起來的話,估計可以成部字典。所以不可能在一篇文章中包攬全部內容。我會抽取平時生產上經常遇到的、看文章經常看到的,聽高手討論時經常聽到的一些名詞分幾篇文章,進行深入一點的解釋,希望能解大家的部分惑。
二、JRE、JDK、SDK
關於JRE與JDK間的關系,在上一節《Java之路——Java初接觸》中已經講過,這裡在深入講一下。先說一下這兩個是什麼英文的縮寫。
JRE:Java Runtime Environment
JDK:Java Development Kit
從英文可以看出,JRE是Java的運行環境,JDK是Java的開發工具包。那顧名思義,要運行Java程序,就一定要用到JRE,要開發Java程序,就要用到JDK。那JRE與JDK會不會有什麼關系呢?接著,我們回顧一下Oracle官網上的Java SE 8的組成描述[2]:
大家從圖中可以看到,JRE包含了Java虛擬機、Java基礎類庫等一系列需要運行Java的環境。而JDK除了包含JRE有的東西以外,同時多了開發時所需要用到的如javac等Tools和Tools API的內容。也就是說,JRE是JDK的一個子集,JDK包含了JRE的所有內容。也許細心的朋友也發現了,在官網上下載JDK安裝的時候,會在JDK的目錄下包含一個JRE,如圖:
有些初學開發者在配Eclipse的JRE環境的時候就惆怅了,究竟要配JDK呢,還是配JRE呢。看完上面那個圖,問題應該就解決了。JDK除含有JRE的內容外,還包括開發的工具等內容,所以要是一個開發者,那就應該配JDK作為JRE環境了。
最後來說說SDK有時什麼東西。SDK英文全稱是Software Development Kit,翻譯成中文就是軟件開發工具包,一般都是一些軟件工程師為特定的軟件包、軟件框架、硬件平台、操作系統等建立應用軟件時的開發工具的集合[3]。所以我們也可以說,JDK是Java的SDK。
三、API
API,英文全稱是Application Programming Interface,中文意思是應用程序編程接口。那接口又是什麼東西呢?我們可以簡單的想象成,接口就是我們的那些插座,只要我們把符合要求的插頭插上插座,不用理插座怎麼實現,能都用得上電。編程中的接口也是同樣的道理,我們不需要關心接口的具體實現,只需要按照接口定義好的規則去調用,就可能實現想要的效果,這就是接口。那說回API,理解完接口(Interface)後,看回API的全稱,大概就應該了解它指的是提供給編程人員調用的一些封裝了實現的接口。具體到我們編程的時候,經常說"這個怎麼用,查一下API",意思通常就是查一下API的說明文檔。例如要查一下Java基礎類中某個類怎麼用,通常就是上Oracle的官網上查相關文檔:http://docs.oracle.com/javase/8/docs/api/。
例如上圖,我們就可以看到,BufferedInputStream類中有什麼方法,各個方法有什麼用,怎麼調用,返回什麼結果。查完後,我們就會使用了。
四、IDE
IDE,英文全稱是Integrated Development Environment,中文意思是集成開發環境,也就是提供給開發人員進行程序開發的應用程序,包括但不限於編輯器、編譯器、調試器和圖形用戶界面等工具。例如我們用於Java開發的Eclipse就是一個IDE。
.Net范疇開發使用的Visual Studio系列也是.Net開發的IDE。
五、JDBC
JDBC,英文全稱是Java Data Base Connectivity,中文意思是Java數據庫連接,是一種用於執行SQL語句的Java API。參考上部分對API的解釋,可知道JDBC提供了一個基准,數據庫廠商與第三方中間件廠商根據基准實現對數據庫的調用。而開發人員只需根據JDBC API的標准來進行數據庫的調用,無需理會後面的怎麼實現的。由於JDBC API提供了統一的接口,所以不管你是調用Sql Server,還是Oracle,還是Mysql,寫好的代碼都不需要怎麼改動。這也是實現接口的好處所在。
要實現一個JDBC程序,簡單分為下面六個步驟[4]:
1.引入JDBC類所需要的包。
2.注冊JDBC驅動程序,所謂驅動程序,可以簡單理解為實現了JDBC接口的那些類集合。
3.打開一個連接
4.執行一個查詢
5.從結果中提取數據
6.清理環境
代碼示例及注釋如下:
六、JVM
說到JVM,相信大伙們都聽得很多,覺得是個深奧的東西,但又不知道深奧在哪裡,不明覺厲了。這裡並不打算對其展開很深入的講解,因為內容可以寫成一本書了,只是對其的重要作用作一些描述,讓大家有個概念,知道它究竟用來干什麼的。
我們首先來看看JVM的英文全稱為:Java Virtual Machine,中文意思則為Java虛擬機。顧名思義,它是一種根據計算設備規范,虛構出來的計算機。還記得在《Java之路——Java初接觸》裡面說過,Java出來的口號是"Write Once,Run Anywhere"嗎?JVM就是實現這一功能的關鍵。怎麼實現呢?先看一下網上的一幅圖[5]:
我們抓住圖中的幾個關鍵詞:Java源文件、Java字節碼、類裝載器、Java虛擬機(JVM)和硬件,來簡單說一下JVM怎麼實現Write Once, Run Anywhere。其實原理很簡單,任務Java源代碼,通過Java編譯器後,都很根據統一的規則,編譯成Java字節碼,也就是我們的那堆class文件。只要是同一套源代碼生成出來的Java字節碼就是一樣的。但是不同的機器,有不同的底層硬件,那同一套字節碼怎麼在不同的硬件環境中運行了?這就要靠JVM了。類裝載器將字節碼裝載到Java虛擬機(JVM)中,JVM就會根據所運行在的操作系統、硬件平台上的不同,最終生成不同的硬件指令,從而可以在指定的操作系統及硬件上運行。也就是說,無論你什麼操作系統、硬件,只要在其上安裝了Java虛擬機(JVM),JVM就能將輸入的Java字節碼轉換到指定的機器指令運行,從而屏蔽了底層運行平台的差別,實現"Write Once,Run Anywhere"的目標了。
JVM除了是實現"Write Once,Run Anywhere"這一功能的關鍵之外,Java程序運行時候的內存溢出、性能、
垃圾回收、數據存放(堆、棧、方法區等)等內容都是JVM所涉及的。這裡附上JVM的一個體系結構圖[6],給大家有個印象。
七、POJO、DTO、VO、BO、MO
這變成裡面,明明就是一個類,但又會被賦予了各種稱呼。當大家講一大堆VO、PO、BO、DTO、POJO後,相信你馬上會被O暈。究竟這些O有是個啥意思呢?這裡我大概解釋一下常見的幾個O。
POJO,英文全稱Plain Old Java Object,其實主要是對比重量級的EJB2.x來說,它描述的是一個輕量級的Java對象。它說的就是一個很普通的,很常規的,沒有加特效進去的Java對象,也就是我們21天學會Java等書上學到的Java對象。之所以起個POJO的名字,估計是因為大家認為有個名字的對象更有吸引力。事實上也如此!
VO,英文全稱Value Object,值對象。其實就如java.lang.Integer這種保存值的對象。這種值對象,我們通常認為是不會隨著時間而變化的,是固定的。所以通常我們要修改一個值對象(VO)的時候,我們是要創建一個新的,而非直接更新的內部的數據。
DTO,英文全稱Data Transfer Object,中文意思為數據傳輸對象。顧名思義,就是用來在網絡中傳輸數據的。根據下圖[7],我們可以看到DTO在整個應用中的位置:
一個簡單的應用程序通常有三部分組成:數據訪問層(DAL)、業務邏輯層和表現層。圖中的Client端相當於表現層。可以看到,Client將用戶輸入的數據包裝成DTO後,傳輸到Service進行業務邏輯的處理,處理完後,又包裝成DTO傳輸回去給Client端做表現層的展示。DTO就是這樣的一個對象。通常我們用到的是貧血的DTO,也就是DTO中只有數據(屬性),沒有行為(方法)。
在圖中,大家還看到BO和MO,就是Bussiness Object和Model Object的縮寫。其實就是對應層的一些用於存儲數據的對象。那為什麼各層要分這麼多不同的Object,我認為主要原因有這幾點:
1.各層處理的數據並不一樣,將數據轉換成該層所使用要到的對象方便處理。
2.從數據庫裡提取的數據,最終到表現層未必是全部用上的,實際用到什麼數據就建立什麼對象,以減少層與層之間的數據傳輸。
3.各層處理的事情不一樣,把不必要的內容傳到某層上,會有安全風險。也就是說不同的層使用不同的Object可以提高安全性。
八、DAO
DAO,英文全稱Data Access Object,中文意思是數據訪問對象。看上去跟DTO只差1個字,有些人會混淆。但其實DAO跟DTO沒有啥關系,所以大家別太糾結。那回歸正題,DAO用來干什麼呢?DAO主要用途就是與數據庫打交道,提供數據訪問的接口,讓業務邏輯調用相關方法操作數據庫,是加載業務邏輯層與數據庫資源中間的層。DAO的例子網上一大堆,我就不重新寫了,在網上找了一個,把DAO的接口類和具體實現類抽取出來,給大家看看[8]。
定義接口類:
import java.util.List; import cn.mldn.lxh.vo.Emp; public interface IEmpDAO { public boolean doCreate(Emp emp) throws Exception; public List<Emp> findAll(String keyWord) throws Exception; public Emp findByid(int empno) throws Exception; }
具體實現類:
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import cn.mldn.lxh.dao.IEmpDAO; import cn.mldn.lxh.vo.Emp; public class EmpDAOImpl implements IEmpDAO { private Connection conn=null; //數據庫連接對象 private PreparedStatement pstmt = null;//數據庫操作對象 public EmpDAOImpl(Connection conn){//通過構造方法取得數據庫連接 this.conn=conn; } public boolean doCreate(Emp emp) throws Exception { boolean flag=false; String sql="INSERT INTO emp (empno,ename,job,hiredate,sal)VALUES(?,?,?,?,?)"; this.pstmt=this.conn.prepareStatement(sql);//實例化PreparedStatement對象 this.pstmt.setInt(1, emp.getEmpno()); this.pstmt.setString(2, emp.getEname()); this.pstmt.setString(3, emp.getJob()); this.pstmt.setDate(4, new java.sql.Date(emp.getHiredate().getTime())); this.pstmt.setFloat(5, emp.getSal()); if(this.pstmt.executeUpdate()>0){ flag=true; } this.pstmt.close(); return false; } public List<Emp> findAll(String keyWord) throws Exception { List<Emp> all= new ArrayList<Emp>(); String sql="SELECT empno,ename,job,hiredate,sal FROM emp WHERE ename LIKE ? OR job LIKE ?"; this.pstmt=this.conn.prepareStatement(sql); this.pstmt.setString(1, "%"+keyWord+"%"); this.pstmt.setString(2, "%"+keyWord+"%"); ResultSet rs=this.pstmt.executeQuery(); Emp emp=null; while(rs.next()){ emp=new Emp(); emp.setEmpno(rs.getInt(1)); emp.setEname(rs.getString(2)); emp.setJob(rs.getString(3)); emp.setHiredate(rs.getDate(4)); emp.setSal(rs.getFloat(5)); all.add(emp); } this.pstmt.close(); return all; } public Emp findByid(int empno) throws Exception { Emp emp=null; String sql="SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?"; this.pstmt = this.conn.prepareStatement(sql); this.pstmt.setInt(1, empno); ResultSet rs = this.pstmt.executeQuery(); if(rs.next()){ emp = new Emp(); emp.setEmpno(rs.getInt(1)); emp.setEname(rs.getString(2)); emp.setJob(rs.getString(3)); emp.setHiredate(rs.getDate(4)); emp.setSal(rs.getFloat(5)); } this.pstmt.close(); return emp; } }
由於涉及JAVA的名詞,限於篇幅,先對上面幾個名詞作解釋。後續會分幾章進行補充解釋,大家有什麼需要了解的,也可以留言,我會盡量解答大家的問題。
九、參考資料:
[1] 百度百科:http://baike.baidu.com/link?url=r1i6GgQ-q4jPrYQ2LOnLASZPW-7DpvHgWh51yfA-YIIREPJa0-YQr36pwmSFFU7O_tryTm7poFhCIyrWsOsK8_
[2] Java Platform Standard Edition 8 Documentation,2017.1.12取自http://docs.oracle.com/javase/8/docs/index.html
[3] 百度百科:http://baike.baidu.com/link?url=h-aUqkRLEPgmTNM22OE370lrfUtjynUz-1uTHbPQfzyIczmZ8EnLfP2Oed6ann4n5OBbyGfadP2m1eRUlnhZtK
[4] JDBC快速入門教程:http://www.yiibai.com/jdbc/jdbc_quick_guide.html
[5] (第6講)jdk,JRE,JVM:<http://blog.sina.com.cn/s/blog_bf75829f0102wkmm.html>
[6] 【轉】JVM介紹:http://www.cnblogs.com/sunada2005/p/3577799.html
[7] DTO – 服務實現中的核心數據:http://www.cnblogs.com/loveis715/p/4379656.html
[8] Java中的DAO設計模式應用舉例 ------> 來自Java WEB 開發實戰經典http://blog.csdn.net/hanxuehen/article/details/7074805>