2014-09-17 1 views
1

Java에서 인스턴스 변수를 클래스 자체에서 초기화 할 수있는 이유는 무엇입니까? 우리가 그 클래스의 객체를 생성하지 않는다면 인스턴스 변수에 할당 된 메모리가 없다는 것을 의미합니다. 그런 다음 메모리 할당없이 어떻게 초기화 될 수 있습니까?클래스의 초기화

답변

4

인스턴스 변수를 직접 초기화해도 개체를 만들기 전에 개체 변수를 초기화하지 않습니다. Java가 제공하는 문법적 인 설탕이므로 생성자에서 다른 행을 저장할 수 있습니다. 예를 들어, 다음 코드 :

public class MyClass { 
    int member = 7; 
} 

public class MyClass { 
    int member; 

    public MyClass() { 
     memeber = 7; 
    } 
} 
1

이러한 인스턴스 변수는 실제로 생성자가 실행되기 전에 초기화됩니다.

1

인스턴스 변수에 해당 클래스의 객체를 만들지 않고 메모리 할당 지점이 없습니다. 따라서 생성자 실행 직전에만 객체를 만들면 모든 초기화, init 블록 실행 및 메모리 할당이 수행됩니다.

0

전체 초기화 계층에 equivilant되어 여기 철자를 큰 깁니다.

public class MyClass { 
    int member = 7; 
} 

그냥 member을 초기화하고 미세한 그레인 수준에서 7로 초기 값을 설정하는 런타임에 대한 지침이다하고 귀하의 경우를 들어, 변수는 기본값으로 초기화 한 후 새 값을 할당 . 그것의 원자적인 행동. 그러나 다른 사람들처럼 이것은 생성자 호출 전에 발생한다고 말했다. 그래서 모든 로컬 변수는 런타임이 생성자를 호출하기 전에 초기화됩니다.

public class Auto { 
    int numberOfDoors = 4; 
    int numberOfWheels = 4; 
    //.. 
} 

순서 추적 :

1 만들기 member 같은 변수가 초기화 등

0

가정하자, 우리는 클래스 Auto 이름 전에 마찬가지로 모든 정적이라고 Obj라는 객체는 "new"연산자를 사용합니다 :

Auto fordMustang = new Auto(); 

2. 메모리가 할당되었습니다.
3. 그런 다음 생성자가 호출됩니다.

클래스 자체의 인스턴스 변수는 구문 식 설탕입니다. 사실, 이러한 변수는 새 객체를 만들 때까지 존재하지 않습니다.