저는 2 년 넘게 Java로 프로그래밍을 해왔습니다. 멤버 변수에 대한 세부 사항을주의 깊게 살펴보고 클래스가 초기화되는 방식에 대한 호기심을 나타 냈습니다.Java 클래스 초기화 순서
나는 게임에 일하고 있어요 및 GameState
를 확장 내 수업, GameStateMenu
,에,이 멤버 변수가 : I합니다 (superclass
에서 강제로 상속되는 init()
방법이
private int buttonPadding = 10;
을 superclass constructor
에서 호출), 그 중 을 init()
메소드 내부에 호출하면 0
을 출력합니다.
또한 GameStateMenu
클래스의 내부 update()
방법이있다, 그리고 나는 그것의 내부, 코드, System.out.println(buttonPadding)
의 같은 라인을 넣어, 그것은 10.
GameState
클래스 밖으로 인쇄 계속 :
public abstract class GameState {
public GameState() {
init();
}
protected abstract void init();
public abstract void load();
public abstract void update();
public abstract void render();
public void dispose() {
return;
}
}
을 클래스 :
public class GameStateMenu extends GameState {
...
private int buttonPadding = 10;
@Override
protected void init() {
System.out.println(buttonPadding); // prints out 0
...
}
...
@Override
public void update() {
System.out.println(buttonPadding); // prints out 10
...
}
...
}
내가 이해할 수없는 것은 wh y buttonPadding
은 init()
메서드가 호출 될 때 0
이고 클래스가 완전히 초기화되고 update()
메서드가 호출되면 정기적으로 buttonPadding
이 초기화되어 10
가 인쇄됩니다. 왜이 작업을 수행합니까? 그리고/또는 Java의 초기화 순서는 무엇입니까?
정적 인 경우 buttonPadding
을 올바르게 만들었지 만 올바르게 작동하지만 여전히 구성원 변수가 설정되지 않은 이유에 대해 궁금합니다.
상황을보다 명확하게 보여주기 위해 상황의 [minimal code example] (http://stackoverflow.com/help/mcve)을 만드는 것이 좋습니다. – Sebi
실제 코드를 게시 할 수 있습니까? 너의 설명과 약간 혼란스러워. buttonPadding이 전역 변수 인 경우에는 '정적'으로 선언해야한다고 생각합니다. 그렇지 않으면 실제로 멤버 변수이고 GameState는이 변수에 액세스 할 수 없습니다. – Dtor
게시물을 일부 코드로 업데이트하고 내 문법을 '멤버 변수'대신 '전역 변수'로 지정하는 방법을 수정했습니다. – CoderMusgrove