package com.ami.practice;
public class UnrechebleStatement {
public static void main(String[] args) {
System.out.println(m());
}
public static int m(){
try{
int x=0;
int y=10/x;
return y;
}catch(Exception e){
return 1;
}finally {
return 2;
}
}
}
回答
最後塊總是執行......閹嘗試執行或趕上...
帶表達式的return語句試圖將控制轉移到的調用者
包含它的方法; Expression的值將成爲方法調用的值。更確切地說,執行這樣的返回語句首先評估表達式。如果由於某種原因,表達式的評估突然完成,那麼由於這個原因,返回語句會突然完成。如果表達式的計算正常完成,產生一個值V,則返回語句完成突然,原因是與價值V.返回
[...]
前面的描述說:「試圖轉移控制「而不僅僅是」傳輸控制「,因爲如果在其try或catch子句包含return語句的方法或構造函數中有任何try語句(第14.20節),那麼將按順序執行這些try語句的任何finally子句,最內層到最外層,在控制轉移到方法或構造函數的調用者之前。突然完成finally子句可能會中斷由return語句啓動的控制權轉移。
尤其是第二部分要完全回答你的問題
它看起來不錯,你能解釋在提供的示例代碼中的流程嗎?即使finally被執行,第一個返回被調用,然後第二個返回被調用。爲什麼使用第二個回報的價值? – matt
@matt作爲'JLS'狀態,'return 1'試圖將controll傳回給調用者,但底層的'finally''返回2'會突然出現'catch'' return',並將控制權轉回與由'finally'子句中提供的'return'提供的值。 – SomeJavaGuy
最後總是叫除了在某些情況
1)如果System.exit()的調用
2)如果JVM崩潰
3)如果我們使用嵌套try catch
- 1. 爲什麼如果語句返回真?
- 2. 爲什麼必須返回語句catch塊之前throw語句
- 3. 爲什麼select()始終在非阻塞模式下被阻塞
- 4. 在try塊java中返回語句。什麼會被方法返回,爲什麼?
- 5. 在什麼情況下winsock會阻塞send()返回0?
- 6. 什麼時候會讀取阻塞和非阻塞套接字返回零?
- 7. verilog/systemverilog - 跨兩個始終阻塞語句的行爲是什麼?
- 8. 爲什麼Antlr4會阻塞LT!*
- 9. 爲什麼我的鎖不會阻塞?
- 10. 這個goroutine爲什麼會阻塞?
- 11. 讀FIFO:爲什麼會阻塞然後非阻塞
- 12. 爲什麼Console.WriteLine()阻塞從Stream.ReadAsync()回調?
- 13. 如果select語句沒有返回任何行,返回什麼?
- 14. 如果那麼在PeopleSoft查詢語句
- 15. 如果NOT IN段中的表爲空,那麼SQL語句不返回結果
- 16. 如果查詢語句包含'',那麼正確的語法是什麼?
- 17. 爲什麼concurrent_queue非阻塞?
- 18. 爲什麼ioctl()不阻塞?
- 19. 爲什麼在返回語句後這個變量會改變?
- 20. 如果Task.Run的運行沒有返回,它會返回什麼?
- 21. 如果android中的EditText.getText()返回空,它會返回什麼?
- 22. hasNext() - 它什麼時候阻塞,爲什麼?
- 23. 您認爲在catch中嵌套try/catch語句有什麼用?
- 24. 爲什麼它會一直返回false?
- 25. 爲什麼它會一直返回「null」?
- 26. 如果在commit()之前返回Ident_current,那麼在SqlTransaction.BeginTransaction()中,應返回什麼值
- 27. 如果是空的結果集,那麼MySQL和pdo :: fetchColumn()會返回什麼?
- 28. catch語句之前的返回語句
- 29. 的jQuery如果那麼else語句
- 30. 爲什麼在playframework renderbinary之後不會最終阻止執行?
因爲它的定義與[Java語言規範](https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls- 14.20.2)。 –
http://stackoverflow.com/a/65049/4297364 –
爲什麼你認爲這個關鍵字最終被命名爲...... – GhostCat