java - 如何理解:在父类中如果有常量属性,在子类中使用常量属性时是不会进行父类的类加载。
巴扎黑
巴扎黑 2017-04-17 17:34:01
0
4
403

是不是因为父类编译时会生成常量,而子类在使用时已经有常量了,不需要再对父类进行加载。

巴扎黑
巴扎黑

모든 응답(4)
Peter_Zhu

클래스의 정적 코드 블록과 정적 상수 조명의 사용은 클래스 로딩에 의존하지 않습니다. 즉, 클래스의 정적 변수를 사용해도 해당 클래스의 로드가 트리거되지 않습니다.

으아악
Peter_Zhu

하위 클래스를 로드할 때 상위 클래스가 반드시 로드됩니다.
JVM 로딩 순서에서는 상위 클래스를 먼저 로드한 다음 하위 클래스를 초기화해야 합니다.

제 기억이 맞다면 순서는 상위 클래스의 정적 변수 - 상위 클래스의 정적 코드 블록 - 하위 클래스의 정적 변수 - 하위 클래스의 정적 코드 블록입니다. 제가 순서를 잘못 기억했을 수도 있습니다.

左手右手慢动作

하위 클래스를 로드하면 상위 클래스가 먼저 로드됩니다
아래 코드를 작성했습니다:
Super

으아악

서브

으아악

출력은 다음과 같습니다.

슈퍼

아웃메인
1
2

부모 클래스가 로드됩니다. 말씀하신 문제가 무엇인가요?

刘奇

보충:

으아악

실행 결과:

으아악

참고:

으아악

상수에서 마지막을 제거하면 결과는 다음과 같습니다.

으아악

jdk1.8
이런 일이 발생하는 이유는 불변성으로 인해 final이 컴파일 시간에 최적화되기 때문입니다. System.out.println(Child.const_str)은 컴파일 위치 후 상수 풀의 문자열을 직접 가리킵니다. 안에.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿