2017-12-15 23 views
3

나는이 재연 된 예외를 발견하고 심지어 컴파일된다는 것에 놀랐다."throw (e)"와 "throw e"의 차이점은 무엇입니까?

} catch(SomeException e) { 
    ... 
    throw(e); 
} 

이 던져()와 무슨 일이 일반적으로 사용하는 사이에 어떤 차이가 ...? 거기에

} catch(SomeException e) { 
    ... 
    throw e; 
} 

이 문서화 또는 지침 다른 통해 하나를 선택에 어디에 대한 링크?

+4

이들은 동일합니다. –

+1

마치 불필요한 그룹 괄호처럼 보입니다. – Carcigenicate

+0

로깅해서는 안됩니다. 다른 곳에 그것을 잡아서 거기에 기록하면 두 가지 예외가 있다는 잘못된 인상을 받게됩니다. –

답변

9

아주 약간의 언어로 원하는만큼 많은 괄호를 사용할 수 있습니다. Java는 그 중 하나입니다. 다음은 완벽하게 유효한 코드입니다.

public class HelloWorld { 
    public static void main(String[] args) { 
    throw ((((new RuntimeException())))); 
    } 
} 

원본 파일이 2 바이트 더 클 경우를 제외하고는 아무런 차이가 없습니다.

+2

"소스 파일이 2 바이트 더 큰 것을 제외하고는 아무런 차이가 없습니다." 그리고 훨씬 덜 읽을 수 있습니다. – davidxxx

6

기능상으로 동일합니다.

그러나 누군가를 메서드 호출로 착각 할 수 있으므로 적어도 누군가가 불필요하게 자신이하는 일을 궁금해하게하기 때문에 throw(e);을 선택하지 마십시오. 명확성을 위해 보통 throw e; 구문을 사용하십시오.

+2

오른쪽. 기능 요구 사항이나 가독성 향상 기능이없는 불필요한 괄호는 오류가 발생하기 쉽고 죽은 코드입니다. – davidxxx

0

던져는 경우는 동일합니다

Public int get value() { 
    return (3); 
} 

의 equlivilant인가 return 문

Public int get value() { 
    return 3; 
} 

처럼 생각

을에 "throw 가능 객체"(일반적으로 예외)를 throw되는 명령어입니다 던지기 가능.

그들은 똑같은 것을 준수 할 것입니다.