JDK1.7新特性(經過本人測試的結果)
阿新 • • 發佈:2018-11-10
- 網上有很多關於jdk版本的部落格, 我從中選取了一些進行了驗證,發現很多錯誤並作出了修改.
- 對集合類的語言支援; (經過will我的實踐,這是一個假訊息!)
- 自動資源管理;
- 改進的通用例項建立型別推斷;
- 數字字面量下劃線支援;
- switch中使用string;
- 二進位制字面量;
- 簡化可變引數方法呼叫;
- 新增一些取環境資訊的工具方法;(經過will我的實踐,這是一個假訊息!)
- Boolean型別反轉,空指標安全,參與位運算;(經過will我的實踐,這是一個假訊息!)
- 兩個char間的equals; (經過will我的實踐,這是一個假訊息!)
- 安全的加減乘除;(經過will我的實踐,這是一個假訊息!)
- map集合支援併發請求 ,且可以寫成 Map map = {name:"xxx",age:18};(經過will我的實踐,這是一個假訊息!)
1 對集合類的語言支援 (假的)
假的...
2Java中某些資源是需要手動關閉的,如InputStream,Writes,Sockets,Sql classes等。這個新的語言特性允許try語句本身申請更多的資源,
這些資源作用於try程式碼塊,並自動關閉。 為了支援這個行為,所有可關閉的類將被修改為可以實現一個Closable(可關閉的)介面。
以前:
現在:BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); }
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
//code
}
當然也可以定義關閉多個資源:
try (
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest))
{
// code
}
3
增強的對通用例項建立(diamond)的型別推斷
型別推斷是一個特殊的煩惱,下面的程式碼:
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
通過型別推斷後變成:
Map<String, List<String>> anagrams = new HashMap<>();
這個<>被叫做diamond(鑽石)運算子,這個運算子從引用的宣告中推斷型別。
4 數字字面量下劃線支援
很長的數字可讀性不好,在Java 7中可以使用下劃線分隔長int以及long了,如:
int one_million = 1_000_000;
運算時先去除下劃線,如:1_1 * 10 = 110,120 – 1_0 = 110
5 switch中使用string
以前你在switch中只能使用number或enum。現在你可以使用string了:
String s = ...
switch(s) {
case "quux":
processQuux(s);
// fall-through
case "foo":
case "bar":
processFooOrBar(s);
break;
case "baz":
processBaz(s);
// fall-through
default:
processDefault(s);
break;
}
6 二進位制字面量
由於繼承C語言,Java程式碼在傳統上迫使程式設計師只能使用十進位制,八進位制或十六進位制來表示數(numbers)。
由於很少的域是以bit導向的,這種限制可能導致錯誤。你現在可以使用0b字首建立二進位制字面量:
int binary = 0b1001_1001;
現在,你可以使用二進位制字面量這種表示方式,並且使用非常簡短的程式碼,可將二進位制字元轉換為資料型別,如在byte或short。
byte aByte = (byte)0b001;
short aShort = (short)0b010;
7
簡化的可變引數呼叫 (假的)
當程式設計師試圖使用一個不可具體化的可變引數並呼叫一個*varargs* (可變)方法時,編輯器會生成一個“非安全操作”的警告。
JDK 7將警告從call轉移到了方法宣告(methord declaration)的過程中。這樣API設計者就可以使用vararg,因為警告的數量大大減少了。
8 新增一些取環境資訊的工具方法(假的)
File System.getJavaIoTempDir() // IO臨時資料夾
File System.getJavaHomeDir() // JRE的安裝目錄
File System.getUserHomeDir() // 當前使用者目錄
File System.getUserDir() // 啟動java程序時所在的目錄
9 Boolean型別反轉,空指標安全,參與位運算(假的)
Boolean Booleans.negate(Boolean booleanObj)
//True => False , False => True, Null => Null
boolean Booleans.and( boolean [] array)
boolean Booleans.or( boolean [] array)
boolean Booleans.xor( boolean [] array)
boolean Booleans.and(Boolean[] array)
boolean Booleans.or(Boolean[] array)
boolean Booleans.xor(Boolean[] array)
10 兩個char間的equals (假的)
boolean Character.equalsIgnoreCase( char ch1, char ch2) //不存在這個方法
11 安全的加減乘除(假的)
int Math.safeToInt( long value)
int Math.safeNegate( int value)
long Math.safeSubtract( long value1, int value2)
long Math.safeSubtract( long value1, long value2)
int Math.safeMultiply( int value1, int value2)
long Math.safeMultiply( long value1, int value2)
long Math.safeMultiply( long value1, long value2)
long Math.safeNegate( long value)
int Math.safeAdd( int value1, int value2)
long Math.safeAdd( long value1, int value2)
long Math.safeAdd( long value1, long value2)
int Math.safeSubtract( int value1, int value2)
12 map集合支援併發請求 ,且可以寫成 Map map = {name:"xxx",age:18};(假的)