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)