Java7語法新特性:
前言,這是大部分的特性,但另一些沒有寫進去,比方多核 並行計算的支持加強 fork join 框架;這方面並沒有真正寫過和了解。也就不寫進來了。
1. switch中添加對String類型的支持。
public String generate(String name, String gender) {
String title = "";
switch (gender) {
case "男":
title = name + " 先生";
break;
case "女":
title = name + " 女士";
break;
default:
title = name;
}
return title;
編譯器在編譯時先做處理:
①case僅僅有一種情況。直接轉成if。
②假設僅僅有一個case和default,則直接轉換為if...else...。
③有多個case。先將String轉換為hashCode,然后相應的進行處理,JavaCode在底層兼容Java7曾經版本號。
2. 數字字面量的改進
①添加二進制表示
Java7前支持十進制(123)、八進制(0123)、十六進制(0X12AB)
Java7添加二進制表示(0B11110001、0b11110001)
②數字中可加入分隔符
Java7中支持在數字量中間添加'_'作為分隔符。更直觀,如(12_123_456)。下划線僅僅能在數字中間。編譯時編譯器自己主動刪除數字中的下划線。
3. 異常處理
①Throwable類添加addSuppressed方法和getSuppressed方法。支持原始異常中加入被抑制的異常。
異常抑制:在try和finally中同一時候拋出異常時,finally中拋出的異常會在異常棧中向上傳遞,而try中產生的原始異常會消失。
在Java7之前的版本號,能夠將原始異常保存。在finally中產生異常時拋出原始異常:
public void read(String filename) throws BaseException {
FileInputStream input = null;
IOException readException = null;
try {
input = new FileInputStream(filename);
} catch (IOException ex) {
readException = ex; //保存原始異常
} finally {
if (input != null) {
try {
input.close();
} catch (IOException ex) {
if (readException == null) {
readException = ex;
}
}
}
if (readException != null) {
throw new BaseException(readException);
}
}
}
在Java7中的版本號,能夠使用addSuppressed方法記錄被抑制的異常:
public void read(String filename) throws IOException {
FileInputStream input = null;
IOException readException = null;
try {
input = new FileInputStream(filename);
} catch (IOException ex) {
readException = ex;
} finally {
if (input != null) {
try {
input.close();
} catch (IOException ex) {
if (readException != null) { //此處的差別
readException.addSuppressed(ex);
}
else {
readException = ex;
}
}
}
if (readException != null) {
throw readException;
}
}
}
②catch子句能夠同一時候捕獲多個異常
public void testSequence() {
try {
Integer.parseInt("Hello");
}
catch (NumberFormatException | RuntimeException e) { //使用'|'切割,多個類型,一個對象e
}
}
③try-with-resources語句
Java7之前須要在finally中關閉socket、文件、數據庫連接等資源;
Java7中在try語句中申請資源,實現資源的自己主動釋放(資源類必須實現java.lang.AutoCloseable接口,一般的文件、數據庫連接等均已實現該接口,close方法將被自己主動調用)。
public void read(String filename) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
StringBuilder builder = new StringBuilder();
String line = null;
while((line=reader.readLine())!=null){
builder.append(line);
builder.append(String.format("%n"));
}
return builder.toString();
}
}
try子句中能夠管理多個資源:
public void copyFile(String fromPath, String toPath) throws IOException { try ( InputStream input = new FileInputStream(fromPath); OutputStream output = new FileOutputStream(toPath) ) { byte[] buffer = new byte[8192]; int len = -1; while( (len=input.read(buffer))!=-1 ) { output.write(buffer, 0, len); } } }
4. 變長參數方法的優化
Java7之前版本號中的變長參數方法:
public int sum(int... args) {
int result = 0;
for (int value : args) {
result += value;
}
return result;
}
對collections的支持
Java代碼
如今你還能夠:
2.自己主動資源管理
原來:
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
如今:
3.對通用實例創建(diamond)的type引用進行了改進
原來:
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
如今:
Map<String, List<String>> anagrams = new HashMap<>();
4.數值可加下划線
6.二進制文字
int binary = 0b1001_1001;
異常catch能夠一次處理完而不像曾經一層層的surround;