2016-06-29 4 views
0

이 프로그램을 이해할 수 없습니다. "Hello World"를 출력하길 기대하지만 대신 "World"만 인쇄합니다. 먼저 try 블록이 실행되어 "Hello"와 ""를 인쇄 한 다음 나중에 1/0을 만나면 ArithmeticException을 던질 것이라고 생각했습니다. 예외가 catch 블록에 걸리면 "World"가 인쇄됩니다.Java 예외 처리 이해 문제

프로그램은 다음과 같습니다.

import java.util.*; 
class exception{ 
    public static void main(String args[]) 
    { 
     try 
     { 
      System.out.println("Hello"+" "+1/0); 
     } 
     catch(ArithmeticException e) 
     { 
      System.out.println("World"); 
     } 
    } 
} 
+1

왜 '1/0'을 평가하기 전에''Hello "'를 출력 할 것이라고 생각합니까? – user2357112

+1

아무것도 출력하기 전에''Hello "+" "+ 1/0'의 값을 해석해야합니다. ''Hello ''는 인쇄하지 않습니다. 왜냐하면 당신이 _just_''Hello "', 대신''Hello"'와 예외의 원인이되는 것을 인쇄하지 않기 때문입니다. –

+0

@ChrisSprague 감사합니다. 나는 이해했다. –

답변

1

첫 번째 "Hello"+" "+1/0이 평가됩니다. 그리고 나서 System.out.println(...)에 인수로 전달되었습니다. 그렇기 때문에 System.out.println(...)이 호출되기 전에 예외가 발생합니다.

+0

매우 도움이되었습니다. 회신 해 주셔서 감사합니다. –

+0

즐거움은 모두 내 것입니다. – Shiro

5

println 함수를 호출하기 전에 예외가 발생합니다. 인수 값은 함수 호출 전에 계산되어야합니다. 다음과 같이 예상 한 결과를 달성하기 위해 프로그램, 당신은 try 블록의 코드를 편집하는 순서를

:

 try 
    { 
     // this will work and execute before evaluating 1/0 
     System.out.print("Hello "); 
     // this will throw the exception 
     System.out.print(1/0); 
    } 
    catch(ArithmeticException e) 
    { 
     System.out.println("World"); 
    } 
+0

해답을 알려줘서 고맙습니다. –

1

그것은 단순히 "말"을 검색하지 않습니다 왼쪽에서 오른쪽으로. () 안의 모든 것을 성공적으로 평가해야하며, 그럴 경우 인쇄됩니다.

"안녕하세요"로 보입니다. 괜찮습니다. 다음으로 1/0을보고 오류가 발생합니다.

수학이 성공적으로 평가 된 경우 "Hello"와 그 결과를 연결하려고 시도합니다. 그리고 성공하면 인쇄 될 것입니다.

+0

알겠습니다. 정말 감사합니다. –