내 이해할 수 있는 Java 언어를 기반으로, 정적임 com/go/4e6b330a_kr 초기화되어야 정적임 초기화하지 '블록'.
그러나 내가 실제로 구현하기 위한 시도하시겠습니까 ('정적' '마지막' 변수가 너무), I get 오류를 화면에 표시된 (아래 참조).
예 당연하죠. '마지막' 정적 변수는 초기화되었습니다 받을시간은 정적임 블록 그러나 . 당신은 암시적입니다 이동 그 예 ('종료기 / catch' 항상 뭔가 나쁜 happens& & # 39 잡을 경우, 이동, # 39).
'네' 최종 않을 경우 예외가 발생합니다 com/go/4e6b330a_kr 초기화되었습니다.
참고로 정적임 구문을 사용하여 객체중심형 도그마 위배된다. 사용자의 테스트 저회가 디버깅하지 더욱 어렵게 어렵게 만들 수 있습니다.
이 일을 할 수 있습니다 - 던지며 확장하지만 종료하십시오 정적임 블록이어야 예외를 제외하고는 레트로프 있던 포착됨 또는 새 한 수 있습니다. 일반적으로 이 예외를 런타임렉세페시옹 '' 이어야 합니다. 정말 잘 안 될 수 있는 게 더 '일반' idfsysobject. 특정 idfsysobject. (s) '에서' 블록 내에 던져 보십시오. 마지막으로, 정적 클래스의 경우 예외를 던지는 동안 사용할 수 있는 그런 것이 초기화 렌더링됩니다 실행하십시오 jvm 이 때문에 특정 클래스에 초기화하지 할 만 한 번. 그 결과 이 같은 다른 클래스에 사용하려고 시도할 idfsysobject. 노클레스데파운더로 ''.
따라서 이 같은 일이 일을 너회의 초기화 되어야 합니다.
static {
try {
...
} catch (Exception e) {
e.PrintStackTrace();
throw new InitializationFailedException("Could not init class.", e);
}
}
'정의' '은' 니시알이제이션페이레데스세페시옹 것으로 보고 있지만, 기존 gtol 런타임렉세페시옹 사용할 수 있습니다.
public class MyClass
{
private static final SomeClass myVar;
static
{
Object obj = null; // You could use SomeClass, but I like Object so you can reuse it
try
{
obj = new SomeClass(...);
}
catch(WhateverException err)
{
// Possibly nested try-catches here if the first exception is recoverable...
// Print an error, log the error, do something with the error
throw new ExceptionInInitializerError(err);
}
finally
{
myVar = (SomeClass) obj;
}
}
}
여기서 업스트림으로 없다고 가정할 때 잡을 수 있는 일반 또는 포지셔닝하십시오 렉스티오니니니시알이제이션에로 다음 프로그램 하나에 idfsysobject. 마이바르 판매업체에서 안 쓰려고 노력한다. 그러나 이들은 포착됨 프로그램 종료 후 doesn& # 39, t 마이바르 감시하는 데 필요한 코드를 처리할 수 있다 (또는 누얼포인터렉스티언스 행복해질 수 있는 '커밍아웃' all over) nulll.