1. 程式人生 > >JDK的新特性

JDK的新特性

JDK5的新特性:

自動拆裝箱,泛型,增強for,靜態匯入,可變引數,列舉。

自動拆裝箱

JDK1.5以後,簡化了定義方式。(定義的基本資料型別會自動裝箱,定義的包裝型別會自動拆箱)

 Integer x = new Integer(4);可以直接寫成 Integer x = 4;//自動裝箱。 x  = x + 5;//自動拆箱。通過intValue方法。 

需要注意: 在使用時,Integer  x = null;上面的程式碼就會出現NullPointerException。

泛型:

泛型類 

把泛型定義在類上

 格式:public class 類名<泛型型別1,…> 注意:泛型型別必須是引用型別

泛型方法 

把泛型定義在方法上 

格式:public <泛型型別> 返回型別 方法名(泛型型別 .) 

泛型介面

把泛型定義在介面上 

格式:public  interface 介面名<泛型型別1…> 

泛型高階(萬用字元)

泛型如果明確寫了的時候,前後必須一致。

泛型萬用字元

 

<?> 

任意型別,如果沒有明確,那麼就是Object以及任意的Java類了 

? extends E 

向下限定,E及其子類 

? super E 

向上限定,E及其父類 

 

 

增強for

概述

簡化陣列和Collection集合的遍歷 

格式: 

for(元素資料型別 變數 : 陣列或者Collection集合) {     使用變數即可,該變數就是元素     } 

好處:簡化遍歷 

注意事項:增強for的目標要判斷是否為null

靜態匯入:

格式:

import static 包名….類名.方法名; 可以直接匯入到方法的級別 

注意事項 

方法必須是靜態的 如果有多個同名的靜態方法,容易不知道使用誰?這個時候要使用,必須加字首。

由此可見,意義不大,所以一般不用,但是要能看懂。 

可變引數:

可變引數概述 

定義方法的時候不知道該定義多少個引數 

格式 

修飾符 返回值型別 方法名(資料型別…  變數名){} 

注意:

 這裡的變數其實是一個數組 如果一個方法有可變引數,並且有多個引數,那麼,可變引數肯定是最後一個 

可變引數底層是陣列。

Arrays工具類中的一個方法 public static <T> List<T> asList(T... a)  

該方法把能夠把陣列轉為集合,但是集合的底層任然是陣列,長度不可變。

列舉

列舉概述 

是指將變數的值一一列出來,變數的值只限於列舉出來的值的範圍內。

舉例:一週只有7天,一年只有12個月等。 

回想單例設計模式:單例類是一個類只有一個例項 

那麼多例類就是一個類有多個例項,但不是無限個數的例項,而是有限個數的例項。這才能是列舉類。

格式是:只有列舉項的列舉類 

public enum 列舉類名 {             列舉項1,列舉項2,列舉項3…; } 

列舉注意事項: 

定義列舉類要用關鍵字enum 

所有列舉類都是Enum的子類 

列舉類的第一行上必須是列舉項,最後一個列舉項後的分號是可以省略的,但是如果列舉類有其他的東西,這個分號就不能省略。建議不要省略 

列舉類可以有構造器,但必須是private的,它預設的也是private的。

列舉項的用法比較特殊:列舉(“”); 

列舉類也可以有抽象方法,但是列舉項必須重寫該方法 

列舉在switch語句中的使用  

列舉常用方法:

int compareTo(E o) 

String name() 

int ordinal() 

String toString() 

<T> T valueOf(Class<T> type,String name) 

values()  此方法雖然在JDK文件中查詢不到,但每個列舉類都具有該方法,它遍歷列舉類的所有列舉值非常方便 

JDK7新特性

二進位制字面量 

數字字面量可以出現下劃線 

switch 語句可以用字串 

泛型簡化 

異常的多個catch合併 

try-with-resources 語句 

二進位制字面量 

JDK7開始,終於可以用二進位制來表示整數(byte,short,int和long)。

使用二進位制字面量的好處是,可以使程式碼更容易被理解。

語法非常簡單,只要在二進位制數值前面加 0b或者0B

 舉例: int x = ob110110 

數字字面量可以出現下劃線

為了增強對數值的閱讀性,如我們經常把資料用逗號分隔一樣。

JDK7提供了_對資料分隔。 

舉例: int x = 100_1000; 

注意事項: 

不能出現在進位制標識和數值之間 

不能出現在數值開頭和結尾 

不能出現在小數點旁邊 

try-with-resources 語句 

格式: try(必須是java.lang.AutoCloseable的子類物件){…} 

好處: 資源自動釋放,不需要close()了 

把需要關閉資源的部分都定義在這裡就ok了 

主要是流體系的物件是這個介面的子類(看JDK7的API)