2016-08-24 4 views
-1

저는 Java를 처음 사용하고 try-catch-finally 블록에서 제어 흐름을 이해할 수 없습니다. catch 블록에서 예외가 발견 될 때마다 finally 블록에 배치할지 여부에 관계없이 catch 블록 뒤의 코드도 실행됩니다. 그렇다면 마침내 블록의 사용은 무엇입니까?예외 처리의 흐름 제어

class Excp 
{ 
public static void main(String args[]) 
{ 
    int a,b,c; 
    try 
    { 
    a=0; 
    b=10; 
    c=b/a; 
    System.out.println("This line will not be executed"); 
    } 
    catch(ArithmeticException e) 
    { 
    System.out.println("Divided by zero"); 
    } 
    System.out.println("After exception is handled"); 
} 
} 

finally 인쇄 문을 finally 블록 내에두면 아무런 차이가 없습니다.

+0

'try '안에'새로운 RuntimeException()'을 던지면 catch 블록 이후의 코드가 실행되지 않는다는 것을 알 수 있습니다. 그런 다음 finally 블록을 추가하십시오. – Kayaman

+0

'finally' 블록을 사용하여 예외가 발생한 후에도 작업 할 수있는 상태로 프로그램을 설정합니다. – Blobonat

+1

'try' 또는'catch'에'return' 또는 처리되지 않은 예외가 있더라도 finally 블록 안의 코드 **는 항상 ** 실행됩니다. 정말 쉬운 Google 검색에서 발견 된 [여기] (https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html)에 설명되어 있습니다. ** Google을 사용하십시오. ** –

답변

2

try/catch 블록에서 다른 예외 (코드에서 처리되지 않음)가 발생하면 차이가 있습니다.

finally이 없으면 마지막 행이 실행되지 않습니다. finally으로 코드는 무엇이든 상관없이 실행됩니다. 예외가 catch에서 발생하는 경우

0

finally 블록은 실행됩니다 ... 삭제 등의 파일 시스템 ressource, 데이터베이스 잠금 :

이는 가비지 컬렉터의 손이 닿지 않는 이상 정리 작업을 수행하는 데 특히 유용합니다 블록 또는 다른 예외가 try 블록에서 발생하는 경우

예 :

try { 
    int a=5; 
    int b=0; 
    int c=a/b; 
catch (NullPointerException e) { 
    // won't reach here 
} finally { 
    // will reach here 
} 

또한 완전히 catch 블록을 생략하고 여전히 finally 블록이 실행됩니다 보장 할 수

try { 
    a=0; 
    b=10; 
    c=b/a; 
    System.out.println("This line will not be executed"); 
} 
catch(ArithmeticException e){ 
    throw new RuntimeException("Stuff went wrong", e); 
} 
System.out.println("This line will also not be executed"); 
1

이 고려 finally 블록 내의 코드 항상이 실행됩니다. try 또는 catchreturn 또는 처리되지 않은 예외가있는 경우 이것은 매우 쉬운 Google 검색에서 발견 된 here으로 설명되어 있습니다. Google을 사용하십시오.

0

:

try { 
    int a=5; 
    int b=0; 
    int c=a/b; 
} finally { 
    // will reach here 
} 
1

finally 블록은 함수가 반환 된 후에도 실행될 수 있습니다.

public boolean doSmth() { 
    try { 
    return true; 
    } 
    finally { 
    return false; 
    } 
} 

false를 반환합니다.