try(java關鍵字)

try(java關鍵字)

Java關鍵字

用於try..catch..finally塊,進行異常捕獲。

基本介紹

  • 中文名:嘗試
  • 外文名:try
  • 套用:用於捕獲異常
基本信息,作用關係,

基本信息

名稱:try
用法:try是try..catch..finally塊中用來引導第一部分的關鍵字,用於聲明需要捕獲指定語句塊的異常
完整的使用方法是
try {    語句塊1} catch (<? extends Throwable> e) {    語句塊2.1} catch (<? extends Throwable> e) {    語句塊2.2} catch (<? extends Throwable> e) {    語句塊2.3...} finally {    語句塊3}
catch可以出現0次、1次或多次,finally可以出現0次或1次,但是catch和finally不能同時不出現。
catch用法:
當語句塊1中拋出異常時,立即離開語句塊1,之後會在所有catch中依次進行類名比對。如果拋出異常和catch聲明的異常類名一致,或拋出異常是catch聲明的異常的子類,則會進入該catch的語句塊(成為異常的捕獲),在catch的語句塊中可以將異常輸出到命令行或引導用戶進行問題反饋。如果任何一個catch都不匹配,會像上層調用拋出這一異常(在此之前會進入finally語句塊,詳情參考下面的finally用法)。
finally用法:
在語句塊1、語句塊2中,任何試圖離開try..catch..finally塊的語句都會導致語句塊3被執行,如return throw break continue。在finally的語句塊中可以進行記憶體回收等工作。
需要注意的是,如果導致離開的不是語句造成的,而是斷電、記憶體不足等計算機故障,finally語句塊不會被執行。
例子:
public class Test {    public static void main(String[] args) {        int i = 10;        try {            System.out.println(i / 0);        }  catch(ArithmeticException ame) {            ame.printStackTrace();        } finally {            System.out.println("byebye");        }    }}

作用關係

try..catch..finally塊和return的作用關係不易於理解。
在這裡catch中的return語句和try中的return語句相似,因此只討論try..finally的情況
例1:
private int a = 0;private static int c1() {    try {        return 1;    } finally {        a++;    }}
函式返回1,1次調用後a的值為1
這是因為在函式返回之前finally語句塊會被執行
例2:
private static int c2() {    try {        return 1; // unreachable statement    } finally {        return 2;    }}
函式返回2
這是因為在函式返回之前finally語句塊會被執行,因此return 2;會早於return 1;
Intellij IDEA等深度IDE中會提示unreachable statement
例3:
private int a = 0;private static int c3() {    try {        return a + 10;    } finally {        a++;    }}
函式返回10,1次調用後a的值為1
jdk在進行編譯時,會這樣理解代碼:
1、將a + 10的值進行暫存,等待函式返回(該值為10)
2、執行a++(a的值變為1)
3、返回剛才暫存的值
相當於
int tmp = a + 10;return tmp;
例4:
private int a = 0;private static int change() {    return ++a;    private static int c4() {    try {        return change();    } finally {        return change();    }}
c4函式返回2,1次調用後a的值為2
jdk在進行編譯時,會這樣理解代碼:
1、(在try中)調用change並將其結果的值進行暫存,等待函式返回(該值為1)(a的值變為1)
2、(在finally中)調用change並返回(該值為2)(a的值變為2)(之前暫存的值失效,JVM會自動進行記憶體回收)
相當於
try {    int tmp = change();    return tmp; // unreachable statement} finally {    int t = change();    return t;}

相關詞條

熱門詞條

聯絡我們