class ThrowNull {
public static void main(String[] args) {
throw null;
}
}
throw에 대한 규칙은 throw ThrowableInstance;
입니다. 여기에서 ThrowableInstance
은 Throwable 유형의 객체이거나 Throwable의 서브 클래스 여야합니다.Java에서 컴파일 오류가 발생하지 않는 이유는 무엇입니까?
String 또는 Object와 같은 Throwable 클래스가 아닌 int 또는 char과 같은 단순 유형은 예외로 사용할 수 없습니다. null
은 Null 값을 나타내는 특수 Java 리터럴입니다.
그럼 왜이 코드에서 throw null;
이 컴파일 될까요?
왜 컴파일 타임 오류가 발생해야합니까? – BoltClock
현재 Java 컴파일러 자체에 의해 문제의 플래그가 지정되지는 않지만 (나중에 언어 사양이 변경되지 않는 한) "소나 (sonar)"와 같은 정적 체커 (static checker)가 분명히 후보로 나와 있습니다. 개발자. 어쩌면 개발자가 "return null"을 쓰고 싶어했을 것입니다 ... –
'String a() {return null}'을 호출 한 결과는 (sub) 클래스 또는 String의 객체 여야한다는 규칙을 알고 있습니다. Throwable 또는 BigInteger와 같은 간단한 클래스는 문자열로 사용할 수 없습니다. Null은 null 값을 나타내는 특수 Java 리터럴입니다.그렇다면 왜'return null'이 컴파일 시간 오류를 발생시키지 않는지? ????? !!!! 나는 당신의 이중 기준을 여기에 드러내고있다. 왜 당신은''null을 던지지만''return null'에 대해 불평합니까? 나는 그러므로 당신의 질문을 upvote 수 없습니다. 그것은 이중 표준에 의해 너무 지역화되어 있습니다. – Val