是不是因为父类编译时会生成常量,而子类在使用时已经有常量了,不需要再对父类进行加载。
클래스의 정적 코드 블록과 정적 상수 조명의 사용은 클래스 로딩에 의존하지 않습니다. 즉, 클래스의 정적 변수를 사용해도 해당 클래스의 로드가 트리거되지 않습니다.
하위 클래스를 로드할 때 상위 클래스가 반드시 로드됩니다. JVM 로딩 순서에서는 상위 클래스를 먼저 로드한 다음 하위 클래스를 초기화해야 합니다.
제 기억이 맞다면 순서는 상위 클래스의 정적 변수 - 상위 클래스의 정적 코드 블록 - 하위 클래스의 정적 변수 - 하위 클래스의 정적 코드 블록입니다. 제가 순서를 잘못 기억했을 수도 있습니다.
하위 클래스를 로드하면 상위 클래스가 먼저 로드됩니다아래 코드를 작성했습니다: Super
서브
출력은 다음과 같습니다.
슈퍼
아웃메인12
부모 클래스가 로드됩니다. 말씀하신 문제가 무엇인가요?
보충:
실행 결과:
참고:
상수에서 마지막을 제거하면 결과는 다음과 같습니다.
jdk1.8이런 일이 발생하는 이유는 불변성으로 인해 final이 컴파일 시간에 최적화되기 때문입니다. System.out.println(Child.const_str)은 컴파일 위치 후 상수 풀의 문자열을 직접 가리킵니다. 안에.
클래스의 정적 코드 블록과 정적 상수 조명의 사용은 클래스 로딩에 의존하지 않습니다. 즉, 클래스의 정적 변수를 사용해도 해당 클래스의 로드가 트리거되지 않습니다.
으아악하위 클래스를 로드할 때 상위 클래스가 반드시 로드됩니다.
JVM 로딩 순서에서는 상위 클래스를 먼저 로드한 다음 하위 클래스를 초기화해야 합니다.
제 기억이 맞다면 순서는 상위 클래스의 정적 변수 - 상위 클래스의 정적 코드 블록 - 하위 클래스의 정적 변수 - 하위 클래스의 정적 코드 블록입니다. 제가 순서를 잘못 기억했을 수도 있습니다.
하위 클래스를 로드하면 상위 클래스가 먼저 로드됩니다
으아악아래 코드를 작성했습니다:
Super
서브
으아악출력은 다음과 같습니다.
아웃메인
1
2
부모 클래스가 로드됩니다. 말씀하신 문제가 무엇인가요?
보충:
으아악실행 결과:
으아악참고:
으아악상수에서 마지막을 제거하면 결과는 다음과 같습니다.
으아악jdk1.8
이런 일이 발생하는 이유는 불변성으로 인해 final이 컴파일 시간에 최적화되기 때문입니다. System.out.println(Child.const_str)은 컴파일 위치 후 상수 풀의 문자열을 직접 가리킵니다. 안에.