Class 사용은 load·link·initialize·active use의 서로 다른 단계로 진행된다

한 번에 class loading이라고 부르면 bytecode 검증 실패와 static 초기화 예외의 원인을 구분하기 어렵습니다.

단계수행진단 단서
loadbytes → Class objectclass+load·정의 loader
linkverify·prepare·resolveverification/linkage error
initializestatic field/block 순서첫 ExceptionInInitializerError
active usestatic access·new·method초기화 trigger
initialize 실패 branchclass가 erroneous state이후 NoClassDefFoundError

핵심: 초기화 실패는 정상 단계 다음이 아니라 initialize에서 갈라지는 오류 상태이며 최초 원인을 보존해야 합니다.