Class 사용은 load·link·initialize·active use의 서로 다른 단계로 진행된다
한 번에 class loading이라고 부르면 bytecode 검증 실패와 static 초기화 예외의 원인을 구분하기 어렵습니다.
| 단계 | 수행 | 진단 단서 |
|---|---|---|
| load | bytes → Class object | class+load·정의 loader |
| link | verify·prepare·resolve | verification/linkage error |
| initialize | static field/block 순서 | 첫 ExceptionInInitializerError |
| active use | static access·new·method | 초기화 trigger |
| initialize 실패 branch | class가 erroneous state | 이후 NoClassDefFoundError |
핵심: 초기화 실패는 정상 단계 다음이 아니라 initialize에서 갈라지는 오류 상태이며 최초 원인을 보존해야 합니다.