final 변수의 초기화를 깊이 이해하다
둘째는 구조 함수에 있다.그리고 자바에서 1.1 이전에는 정의할 때만 값을 줄 수 있었다.
세 번째는 코드 블록에서 {} 또는static{}
public class InitOrder {
{
System.out.println("before---field");
//System.out.println("d1="+d1);
d1 = 3;
//System.out.println("d1="+d1);
}
static {
System.out.println("before---static field");
//System.out.println("d2="+d2);
d2 = 3;
//System.out.println("d2="+d2);
}
final int a1 = 1;
final int b1;
final int c1;
final int d1;
//final int e1;
static final int a2 = 1;
//static final int b2;
static final int c2;
static final int d2;
//static final int e2;
{
System.out.println("after---field");
//System.out.println("c1="+c1);
c1 = 4;
System.out.println("c1="+c1);
//e2 =3;
}
static {
System.out.println("after---static field");
//System.out.println("c2="+c2);
c2 = 4;
System.out.println("c2="+c2);
//e1 = 3;
}
public InitOrder() {
b1 = 2;
//b2 = 2;
}
public static void main(String[] args) {
InitOrder order = new InitOrder();
System.out.println("c1="+order.c1);
System.out.println("c2="+order.c2);
System.out.println("d1="+order.d1);
System.out.println("d2="+order.d2);
}
}
설명: 위의 모든 주석은 구문 오류로 출력된 결과입니다.
before---static field
after---static field
c2=4
before---field
after---field
c1=4
c1=4
c2=4
d1=3
d2=3
결과 분석: 1.a1에 비해 a2는 기본적으로 문제가 없고 정의할 때 초기화됩니다
2. b1과 비교하면 b2는 구조 함수에서 초기화되고 b1은 문제가 없다. b2는 문제가 있다. 이것은 구조 함수의 호출이 정적 변수의 뒤에 있고 b2는 정적이기 때문에 오류가 발생할 수 있다.
3. c1과 비교하면 d1은 초기화에 문제가 없고 문제가 있는 것은 출력 문장을 사용하는 것이다.d1이 초기화 코드 블록에서 어디에 출력 문구를 추가하든지 오류가 발생할 수 있습니다. 이것은 d1이 있는 초기화 코드 블록의 위치가 변수 d1이 정의한 앞에 있기 때문입니다. 그러나 자바에서 변수의 초기화 순서는 자바에서 변수의 초기화 순서를 볼 수 있습니다. 일반 변수와 초기화 코드 블록의 초기화 순서는 위치의 선후에 따라 출력이 d1 변수를 사용했기 때문에 오류가 발생했습니다. 그러나 저는 잘 모르겠습니다.왜 여기서 d1을 초기화하면 오류가 발생하지 않으며main 함수에서도 호출할 수 있습니다. 이것도 자바 가상기를 보러 가야 합니까?c1이 뒤에 출력 문장을 추가하는 데 문제가 없습니다.앞에 문제가 있으면 이해하기 쉬운데, 바로 이전에 초기화되지 않았다.
4. c2, d2는 3과 같은 이치
5. e1을 정적 코드 블록에 넣으면 분명히 안 된다. 정적 코드 블록이 가장 먼저 불러오기 때문에 e1은 아직 추가하지 않았다.
6.e2에 대해서도 일반 코드 블록의 불러오는 것이 정적 변수보다 늦기 때문에 안 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.