JDK的含義:java development kit是程序員編寫java程序需要的軟件,JDK是整個java的核心,包括了java運行環境、java工具和java基礎的類庫。
JDK包含的基本組件包括:
.javac—編譯器,將源程序轉成字節碼
.jar—打包工具,將相關的類文件打包成一個文件
.javadoc—文檔生成器,從源碼註釋中提取文檔
.jdb—debugger,查錯工具
.java—運行編譯後的java程序
appletviewer:小程序瀏覽器,一種執行HTML文件上的java小程序的java瀏覽器。
javah:產生可以調用java過程的C過程,或建立能被java程序調用的C過程的頭文件。
javap:java反彙編器,顯示編譯類文件中的可訪問功能和數據,同時顯示字節代碼含義。
jconsole:java進行系統調試和監控的工具。
java.lang:這個是系統的基礎類,比如String等都是這裏面的,這個package是唯一一個可以不用import就可以使用的package;
java.io:這裏面有所有輸入輸出有關的類,比如文件操作等;
java.net:這是與網絡有關的類,比如URL,URLConnection等;
java.util:這個是系統輔助類,特別是集合類Collection,List,Map等;
java.sql:這個是數據庫操作的類,Connection,Statement,ResultSet等;
javax.servlet這個是JSP,Servlet等使用到的類;
JDK各個版本的新特性:
jdk1.5的新特性(代號:猛虎):
1.靜態導入(import static)
import語句可以導入一個類或是某個包中的所有類。
import static 語句可以導入一個類中的某個靜態方法或是所有靜態方法。
例如:
Math類提供了很多於數學運算的靜態方法,通常情況下我們是以Math.abs();這樣的方式來進行調用函數的。但是我們可不可以只寫出adb();
在JDK1.5之後,可以使用import static 語句導入一個類中的某個靜態方法或是所有靜態方法。這是JDK1.5的新特性之一。
例如:
import static java.lang.Math.abs;就可以直接寫一個abs();函數。
import static java.lang.Math.*; 就可以直接調用Math類中的所有靜態方法。
2.泛型(Generic)
在JDK1.5之前,在Java集合容器中(如:List)可以講任何類型的對象加入到其中,此時被加入的對象被視爲Object來看待。當從集合容器取出對象時,需要程序員自行保證對象類型的強制轉換。如下:
這段代碼中很顯然List對象中的類型不匹配,但在JDK1.5之前會編譯通過,運行時纔會報錯,這樣在開發過程中很不好。所以JDK1.5引入了泛型(Generic)的概念。在看下面的代碼:
泛型的引入在很大程度上避免了程序員自行保證集合容器中存取數據的強制轉換。
3.For-Each循環(增強型for循環)
JDK1.5中,For-Each循環的加入簡化了集合的遍歷。假設我們要遍歷一個集合對其中的元素進行一些處理。典型的代碼爲:
4.自動裝包/拆包(Autoboxing/unboxing)
自動裝包/拆包大大方便了基本類型數據和它們包裝類地使用。
自動裝包:基本類型自動轉爲包裝類.(int >> Integer)
自動拆包:包裝類自動轉爲基本類型.(Integer >> int)
5.枚舉(Enums)
JDK1.5加入了一個全新類型的“類”-枚舉類型。爲此JDK1.5引入了一個新關鍵字enmu. 我們可以這樣來定義一個枚舉類型。如下:
之後,可以這樣使用:
Gender gender = Gender.male;
也可以對枚舉進行遍歷,枚舉類型提供了兩個靜態方法values()和valueOf():
6.可變參數(Varargs)
可變參數使程序員可以聲明一個接受可變數目參數的方法(類似於多個方法重載,只不過是可變參數提供一個方法實現多個方法的重載,變得只是方法其中的參數)。
注意:可變參數必須是函數聲明中的最後一個參數。
比如:我們編寫一個簡單的打印方法,以傳統的方式實現方法重載:
下面使用可變參數來實現這些方法的重載:
調用方法:
Write("abc",123,new ArrayList()); // 當然其中的參數可以是任意類型,任意多個
// 這就很方便的實現了方法重載
輸出:
java.lang.String
java.lang.Integer
java.util.ArrayList
JDK1.6新特性:(代號“野馬”)
1.DestTop類和SystemTray類
前者用於調度操作系統中的一些功能,例如:
· 可以打開系統默認瀏覽器指定的URL地址;
· 打開系統默認郵件客戶端給指定的郵箱發信息;
· 用默認程序打開或編輯文件;
· 用系統默認的打印機打印文檔。
後者可用來在系統托盤區創建一個托盤程序。
2.使用JAXB2來實現對象與XML之間的映射
JAXB是Java Architecture for XML Binding的簡寫。JAXB是一個業界的標準,是一項可以根據XML Schema產生Java類的技術。JAXB提供了快速而簡便的方法將XML模式綁定到Java表示,從而使得Java開發者在Java應用程序中能方便地結合XML數據和處理函數。
原來JAXB是Java EE的一部分,在JDK6中,SUN將其放到了Java SE中。
3.StAX
StAX是JDK1.6中除了DOM和SAX之外的有一種處理XML文檔的API。
StAX是The Streaming API for XML的縮寫。由於JDK6.0中的JAXB2和JAX-WS 2.0都會用到StAX,所以Sun決定把StAX加入到JAXP家族當中來,並將JAXP的版本升級到1.4.
JDK6裏面JAXP的版本就是1.4。JAXP是Java API for XML Processing的英文字頭縮寫,中文含義是:用於XML文檔處理的使用Java語言編寫的編程接口。
4.使用Complier API
現在我們可以用JDK1.6 的Compiler API動態編譯Java源文件,Compiler API結合反射功能就可以實現動態的產生Java代碼並編譯執行這些代碼,有點動態語言的特徵。
這個特性對於某些需要用到動態編譯的應用程序相當有用, 比如JSP Web Server,當我們手動修改JSP後,是不希望需要重啓Web Server纔可以看到效果的,這時候我們就可以用Compiler API來實現動態編譯JSP文件。
5.輕量級的Http Server API
JDK6 提供了一個簡單的Http Server API,據此我們可以構建自己的嵌入式Http Server,它支持Http和Https協議,提供了HTTP1.1的部分實現,沒有被實現的那部分可以通過擴展已有的Http Server API來實現。
6.插入式註解處理API(Pluggable Annotation Processing API)
JSR (JSR是Java Specification Requests的縮寫,意思是Java 規範請求)用Annotation Processor在編譯期間而不是運行期間處理Annotation, Annotation Processor相當於編譯器的一個插件,所以稱爲插入式註解處理。
7.用Console開發控制檯程序
JDK6中提供了java.io.Console 類專用來訪問基於字符的控制檯設備. 你的程序如果要與Windows下的cmd或者Linux下的Terminal交互,就可以用Console類代勞。
8.對腳本語言的支持
如: ruby, groovy, javascript
9.Common Annotations
Common annotations原本是Java EE 5.0規範的一部分,現在SUN把它的一部分放到了Java SE 6.0中.隨着Annotation元數據功能加入到Java SE 5.0裏面,很多Java 技術(比如EJB,Web Services)都會用Annotation部分代替XML文件來配置運行參數,保證Java SE和Java EE 各種技術的一致性.。
JDK1.7新特性:
1.對Java集合(Collections)的增強支持
在JDK1.7之前的版本中,Java集合容器中存取元素的形式如下:
以List、Set、Map集合容器爲例:
在JDK1.7中,摒棄了Java集合接口的實現類,如:ArrayList、HashSet和HashMap。而是直接採用[]、{}的形式存入對象,採用[]的形式按照索引、鍵值來獲取集合中的對象,如下:
2.在Switch中可用String
在之前的版本中是不支持在Switch語句塊中用String類型的數據的,這個功能在C#語言中早已被支持,好在JDK1.7中加入了。
3.數值可加下劃線
例如:int one_million = 1_000_000;
4.支持二進制文字
例如:int binary = 0b1001_1001;
5.簡化了可變參數方法的調用
當程序員試圖使用一個不可具體化的可變參數並調用一個*varargs* (可變)方法時,編輯器會生成一個“非安全操作”的警告。
6.自動資源管理