我已經使用Java進行了兩年多的Java編程,並且我決定密切關注成員變量的細節,並且對我如何初始化類感到好奇。Java類初始化命令
我工作的一個遊戲,在我的課,GameStateMenu
,延伸GameState
,我有這樣的成員變量:
private int buttonPadding = 10;
我有一個是通過武力從superclass
繼承了init()
方法(從superclass constructor
調用),如果我在init()
方法中調用System.out.println(buttonPadding)
,它會打印出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;
}
}
GameStateMenu
類別:
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當init()
方法被調用時,y buttonPadding
爲0
,但是一旦類被完全初始化,並且update()
方法被調用,定期地,buttonPadding
已經被初始化並且正在打印出10
。它爲什麼這樣做和/或什麼是Java的初始化順序?
雖然,如果我使buttonPadding
靜態,它工作正常,但我仍然好奇爲什麼沒有設置成員變量。
您可能需要考慮創建一個[最小代碼示例](http://stackoverflow.com/help/mcve)以更清楚地說明情況。 – Sebi
你可以發佈有問題的實際代碼?我對你的描述有點困惑。如果buttonPadding是一個全局變量,我認爲它需要聲明爲'static',否則它實際上是一個成員變量,GameState將無法訪問它。 – Dtor
我用一些代碼更新了這篇文章,並修復了關於將它稱爲「全局變量」而不是「成員變量」的語法。 – CoderMusgrove