1. 클래스 초기화
클래스 초기화의 경우: 클래스 초기화는 일반적으로 한 번만 초기화되며, 클래스 초기화는 주로 정적 멤버 변수를 초기화합니다.
클래스의 컴파일에 따라 클래스의 초기화 프로세스가 결정됩니다.
컴파일러가 생성한 클래스 파일은 주로 소스 파일에 정의된 클래스를 다음과 같이 변경합니다.
1) 먼저 정적 멤버변수가 정의된 순서대로 클래스 내부에 멤버변수를 선언합니다.
2) 원래 Java 클래스의 멤버 변수 초기화 순서에 따라 초기화합니다.
Java 클래스와 컴파일된 클래스 간의 해당 변환은 다음과 같습니다.
소스 파일:
다음과 같이 코드 코드를 복사합니다 .
공개 클래스 사람{
공개 정적 문자열 이름="장산";
공개 정적 int 연령;
공전{
나이=20;
System.out.println("초기화 기간");
}
공개 정적 문자열 주소;
공전{
주소="베이징";
나이=34;
}
공개 정적 무효 메인(String[] args) {
System.out.println(이름);
System.out.println(age);
System.out.println(주소);
}
}
Java 소스 코드가 클래스 파일로 변환되면 다음과 유사한 코드로 변환됩니다.
다음과 같이 코드 코드를 복사합니다 .
공개 클래스 사람{
공개 정적 문자열 이름;
공개 정적 int 연령;
공개 정적 문자열 주소;
공전{
name="장산";
나이=20;
System.out.println("초기화 기간");
주소="베이징";
나이=34;
}
공개 정적 무효 메인(String[] args) {
System.out.println(이름);
System.out.println(age);
System.out.println(주소);
}
}
초기화 순서는 변환 후 해당 클래스 멤버 변수의 초기화 순서에 따라 순차적으로 실행되므로 모든 정적 멤버 변수를 먼저 선언한 후 할당하며, 할당 순서도 정적 멤버 변수가 생성된 순서에 따라 결정됩니다. , 참고: 멤버 변수를 정의하고 직접 초기화하는 것은 소스 코드에 정의된 순서대로 정적 코드 블록에서 초기화하는 것과 같습니다.
2. 객체 생성
객체 생성을 위한 초기화 과정은 클래스의 초기화 과정과 유사하지만 생성자 단계가 추가됩니다. 소스 코드는 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다 .
공개 클래스 사람{
{
name="이영";
나이=56;
System.out.println("초기화 기간");
주소="상하이";
}
공개 문자열 이름="장산";
공개 int 연령=29;
공개 문자열 주소="베이징";
공개인(){
name="류자오";
나이=23;
주소="상하이";
}
}
컴파일러가 이를 클래스 파일로 변환한 후에는 다음과 유사한 코드로 변환됩니다.
다음과 같이 코드 코드를 복사합니다 .
공개 클래스 사람{
공개 문자열 이름;
공개 연령;
공개 문자열 주소;
공개인(){
name="이영";
나이=56;
System.out.println("초기화 기간");
주소="상하이";
name="장산";
나이=29;
주소="베이징";
name="류자오";
나이=23;
주소="상하이";
}
}
클래스 내 멤버변수의 초기화와 코드블럭 내 코드가 모두 생성자로 이동되었으며, 멤버변수는 자바 소스 파일의 초기화 순서에 따라 순차적으로 초기화되는 것을 볼 수 있다. 원래 생성자 생성자의 마지막 실행으로 이동됩니다. 이전에는 클래스 초기화 과정을 깊이 이해한 적이 없었기 때문에 어떻게 초기화해야 하는지 알 수가 없었습니다. 책에 나온 초기화 순서만 기억하고 있었는데 시간이 좀 지나서 잊어버렸습니다. 마침내 알아냈습니다. 모델에 따라 초기화 메커니즘을 설명하는 것이 좋습니다. 더 이상 외울 필요가 없습니다. 이해해야만 잊지 않을 수 있습니다.