클래스 초기화 문제
3848 단어 Blog
또한 다음 테스트 코드를 사용하여 이 점을 확인할 수 있습니다.
Java 코드
public class InitialOrderTest {
//
public static String staticField = " ";
//
public String field = " ";
//
static {
System.out.println(staticField);
System.out.println(" ");
}
//
{
System.out.println(field);
System.out.println(" ");
}
//
public InitialOrderTest() {
System.out.println(" ");
}
public static void main(String[] args) {
new InitialOrderTest();
}
}
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
정적 변수
정적 초기화 블록
변량
블록 초기화
구조기
이것은 윗글에서 말한 것과 완전히 일치한다.그렇다면 상속에 대해서는 어떻게 될까?우리는 여전히 테스트 코드로 최종 결과를 얻는다.
Java 코드
class Parent {
//
public static String p_StaticField = " -- ";
//
public String p_Field = " -- ";
//
static {
System.out.println(p_StaticField);
System.out.println(" -- ");
}
//
{
System.out.println(p_Field);
System.out.println(" -- ");
}
//
public Parent() {
System.out.println(" -- ");
}
}
public class SubClass extends Parent {
//
public static String s_StaticField = " -- ";
//
public String s_Field = " -- ";
//
static {
System.out.println(s_StaticField);
System.out.println(" -- ");
}
//
{
System.out.println(s_Field);
System.out.println(" -- ");
}
//
public SubClass() {
System.out.println(" -- ");
}
//
public static void main(String[] args) {
new SubClass();
}
}
위의 코드를 실행하면 결과가 바로 우리의 눈앞에 나타난다.
상위 - 정적 변수
상위 - 정적 초기화 블록
하위 클래스 - 정적 변수
하위 클래스 - 정적 초기화 블록
상위 - 변수
상위 - 블록 초기화
상위 - 구조자
하위 클래스 - 변수
하위 클래스 -- 블록 초기화
하위 클래스 - 구조자
지금은 결과가 이미 자명해졌다.모두가 주의할 수 있는 것은 부류가 완전히 초기화된 후에야 부류의 초기화를 하는 것이 아니라 실제로 부류의 정적 변수와 정적 초기화 블록의 초기화는 부류의 변수, 초기화 블록과 구조기가 초기화되기 전에 완성된 것이다.
그러면 정적 변수와 정적 초기화 블록 사이, 변수와 초기화 블록 사이의 선후 순서는 어떻습니까?정적 변수는 항상 정적 초기화 블록보다 먼저 초기화되고, 변수는 항상 초기화 블록보다 먼저 초기화됩니까?실제로 이것은 그것들이 종류에 나타난 선후 순서에 달려 있다.우리는 정적 변수와 정적 초기화 블록을 예로 들어 설명한다.
마찬가지로 우리는 하나의 종류를 써서 테스트를 진행한다.
Java 코드
public class TestOrder {
//
public static TestA a = new TestA();
//
static {
System.out.println(" ");
}
//
public static TestB b = new TestB();
public static void main(String[] args) {
new TestOrder();
}
}
class TestA {
public TestA() {
System.out.println("Test--A");
}
}
class TestB {
public TestB() {
System.out.println("Test--B");
}
}
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
Test--A
정적 초기화 블록
Test--B
여러분은 변수 a, 변수 b와 정적 초기화 블록의 앞뒤 위치를 마음대로 바꾸면 출력 결과가 클래스에 나타난 앞뒤 순서에 따라 바뀌는 것을 발견할 수 있습니다. 이것은 정적 변수와 정적 초기화 블록은 그들이 클래스에 정의한 순서에 따라 초기화되었다는 것을 설명합니다.마찬가지로 변수와 초기화 블록도 이 규칙을 따른다.
상속 상황에서 클래스의 초기화 순서를 파악한 후 최종 출력 결과를 어떻게 판단하는가가 쉽게 풀렸다.
사실 내부 클래스와 관련된 초기화 문제도 증가시킬 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
게시 페이지 마무리index.php index.php body 태그의 내용을 <body> -> <body <?php body_class(); ?>>라는 식으로 재기록함으로써 class가 부여된다. 전후를 비교해 보자. 다음에 다시 쓴...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.