자바 클래스 구성원 의 초기 화 순서
구체 적 인 생 성 과정:
1.클래스 대상 을 처음 만 들 때 나 이러한 정적 방법/정적 도 메 인 이 처음 방문 되 었 을 때 자바 해석 기 는 이러한 클래스 의 경 로 를 찾 아 클 라 스 파일 을 찾 아야 합 니 다.
2.그리고 이 class(class 대상 만 들 기)를 불 러 옵 니 다.정적 초기 화 에 관 한 동작 은 모두 실 행 됩 니 다.정적 초기 화 는 Class 대상 이 처음 불 러 올 때 만 실 행 됩 니 다.
초기 화 동작
static int n1 = f(1);
static{
n3 = f(3);
// , n3,
System.out.println("println");
}
static int n2 = f(2);
static int n3;
static int f(int i){
System.out.println("n"+i);
return i;
}
대상 을 만 들 거나 이러한 정적 도 메 인/정적 방법 에 접근 하여 인쇄 합 니 다.
n1
n3
println
n2
3.new 연산 자 를 사용 하여 대상 을 만 들 때 먼저 만 들 대상 에 게 충분 한 저장 공간 을 배정 합 니 다.
4.이 저장 공간 은 0 으로 삭 제 됩 니 다.이 는 클래스 의 모든 기본 형식 데 이 터 를 기본 값(수치 와 문 자 는 0,불 은 false)으로 자동 으로 설정 하고 인용 은 null 로 설정 합 니 다.
5.도 메 인(비 정적 도 메 인)정의 에 나타 나 는 모든 초기 화 동작 을 나타 나 는 순서대로 실행 합 니 다.
6.실행 구조 기.
아래 의 예 를 실행 하면 모두 명확 해진 다.
public class MembersInitializeSequence {
public static void main(String[] args){
Bowl.f();
System.out.println(" Bowl ");
new Bowl();
System.out.println(" Bowl ");
new Bowl();
}
}
class Cup {
Cup(int i){
System.out.println("new Cup("+i+")");
}
}
class Bowl{
Cup c1;
Cup c2 = new Cup(2);
{
c1 = new Cup(1);
}
static{
c4 = new Cup(4);
System.out.println("Bowl , , ");
}
static Cup c3 = new Cup(3);
static Cup c4;
Bowl(){
System.out.println("new Bowl()");
}
static void f(){
System.out.println("Bowl f() ");
}
}
클래스 가 계승 되 었 을 때 초기 화 된 순서:
1.초기 화 자 류,클래스 로 더 를 불 러 올 때 다른 클래스 를 계승 한 것 을 발견 할 수 있 습 니 다.클래스 로 더 는 먼저 부모 클래스 를 불 러 와 야 합 니 다.그래서 부모 클래스 를 불 러 오기 시 작 했 습 니 다.부모 클래스 의 정적 부분 은 순서대로 불 러 옵 니 다.이후 하위 클래스 의 정적 부분 이 불 러 옵 니 다.이러한 순 서 는 하위 클래스 의 정적 도 메 인 이 부모 클래스 의 정적 도 메 인 에 의존 할 수 있 음 을 고려 하 는 것 이다.
2.부모 클래스 의 비정 상 부분 이 불 러 옵 니 다.
3.하위 클래스 가 지정 한 부모 클래스 의 구조 기;
4.하위 클래스 의 비정 상 부분 이 불 러 오기;
5.하위 구조 기의 나머지 부분.
여러 차원 의 계승 관 계 는 순서 도 마찬가지다.
예컨대
public class MembersInitializeSequenceEx {
public static void main(String[] args){
// new Cat();
new Tiger();
}
}
class Cat{
int c1 = f1(1);
int f1(int i){
System.out.println("Cat unstatic "+i);
return i;
}
{
System.out.println("Cat unstatic block");
}
static int c2 = f2(2);
static int f2(int i){
System.out.println("Cat static "+i);
return i;
}
static{
System.out.println("Cat static block");
}
public Cat(){
System.out.println("new Cat()");
}
}
class Tiger extends Cat{
int c3 = f1(3);
@Override
int f1(int i){
System.out.println("Tiger unstatic "+i);
return i;
}
{
System.out.println("Tiger unstatic block");
}
static int c4 = f2(4);
static int f2(int i){
System.out.println("Tiger static "+i);
return i;
}
static{
System.out.println("Tiger static block");
}
public Tiger(){
super();
System.out.println("new Tiger()");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.