>Java >java지도 시간 >Java 클래스의 초기화 순서는 무엇입니까

Java 클래스의 초기화 순서는 무엇입니까

WBOY
WBOY앞으로
2023-04-19 09:04:061390검색

Java 클래스의 초기화 순서

더 말해봐야 소용없습니다. 다음은 제가 개인적으로 테스트한 코드로, 한눈에 알 수 있습니다.

 1 package test1;
 2 
 3 public class Test {
 4     public static void main(String[] argc) {
 5         new Child();
 6         System.out.println("================================");
 7         new Child();
 8     }
 9 }
10 
11 class Child extends Parent{
12     private static String staticField = getStaticField();
13     static {
14         System.out.println("child静态方法块初始化");
15     }
16     private String field = getField();
17     {
18         System.out.println("child普通方法块初始化");
19     }
20 
21     public Child() {
22         System.out.println("child构造函数初始化");
23     }
24 
25     public static String getStaticField() {
26         System.out.println("child静态属性初始化");
27         return "staticField";
28     }
29 
30     public static String getField() {
31         System.out.println("child普通属性初始化");
32         return "field";
33     }
34 }
35 
36 class Parent {
37     private static String staticField = getStaticField();
38     static {
39         System.out.println("parent静态方法块初始化");
40     }
41     private String field = getField();
42     {
43         System.out.println("parent普通方法块初始化");
44     }
45 
46     public Parent() {
47         System.out.println("parent构造函数初始化");
48     }
49 
50     public static String getStaticField() {
51         System.out.println("parent静态属性初始化");
52         return "staticField";
53     }
54 
55     public static String getField() {
56         System.out.println("parent普通属性初始化");
57         return "field";
58     }
59 }

인쇄 결과:

 1 parent静态属性初始化
 2 parent静态方法块初始化
 3 child静态属性初始化
 4 child静态方法块初始化
 5 parent普通属性初始化
 6 parent普通方法块初始化
 7 parent构造函数初始化
 8 child普通属性初始化
 9 child普通方法块初始化
10 child构造函数初始化
11 ================================
12 parent普通属性初始化
13 parent普通方法块初始化
14 parent构造函数初始化
15 child普通属性初始化
16 child普通方法块初始化
17 child构造函数初始化

정적 속성과 정적 초기화 블록의 선언 순서를 바꾸면 정적 속성과 정적 초기화 블록의 초기화 순서가 선언 순서와 관련이 있음을 알 수 있습니다. 마찬가지로 일반 속성과 일반 초기화 블록의 초기화 순서도 관련이 있음을 알 수 있습니다. 선언 순서.

요약:

  1. 클래스가 초기화 조건(향후 블로그에 요약됨)을 충족하면 상위 클래스가 먼저 초기화되고(상위 상위 클래스 개체부터 아래쪽으로 초기화) 하위 클래스가 초기화됩니다. 이 클래스를 초기화할 때 정적 속성과 정적 초기화 블록을 먼저 초기화하고(선언 순서와 관련) 최상위 상위 클래스 Object

  2. 에서 아래쪽으로 초기화합니다. new를 통해 객체를 생성할 때 먼저 일반 속성과 일반 초기화 블록(선언 순서 관련)을 초기화한 다음 생성자 메서드를 호출하고 최상위 부모 클래스 Object에서 아래쪽으로 실행합니다. 정적 속성과 정적 초기화 블록은 클래스가 초기화된 후 다시 new를 통해 객체를 생성하면 세 번째 단계만 반복됩니다.

  3. 다음은 Java 프로그래밍 아이디어의 인용문입니다.

  4. 클래스 내에서 변수 정의의 순서에 따라 초기화 순서가 결정됩니다. 변수 정의가 메서드 정의에 분산되어 있더라도 모든 메서드(생성자 포함)가 호출되기 전에는 여전히 초기화됩니다.

위 내용은 Java 클래스의 초기화 순서는 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제