2013-12-21 34 views
1

完全不熟悉編程。有一個難以調試的錯誤。正在嘗試修復它最近幾天的 。通過這樣做讓自己陷入幾乎歇斯底里的狀態。決定坐下來,隨意閱讀隨書頁上的Java書來冷靜下來。這個頁面是關於可變陰影的。然後突然間,我意識到我在我的代碼中有這個廢話, 我聲明瞭兩次相同的變量。我將它移開,這個臭蟲似乎蒸發了。這是一個陰影變量的情況嗎?

public class Action extends JPanel { 
    private final Color BACKGROUND_COLOR = Color.BLACK; //JPanel background 
    private GameMemory memory = new GameMemory();   
    private int[][] grid = memory.getGrid(); 
    public static Color penColor = Color.GRAY;   //Variable for 
                 //color 

    public Action() { //Setting everything for JPanel 
     memory = new GameMemory(); 
     grid = memory.getGrid(); 
     setBackground(BACKGROUND_COLOR); 
     setMinimumSize(new Dimension(360, 720)); 
     setPreferredSize(new Dimension(360, 720)); 
     setMaximumSize(new Dimension(360, 720)); 
     setVisible(true); 
     new Timer(100, new TimerListener()).start(); 
     //Setting Everything for keylistener 
     this.setFocusable(true); 
     this.requestFocus(); 
     this.addKeyListener(new MyKeyListener()); 
    } 

那麼你們怎麼看?這真的是陰影嗎?

回答

0

在聲明中沒有影子概念。

當有不同範圍或父母和孩子具有相同名稱的變量具有相同的變量名稱並訪問它們時,會產生陰影。

可能性是,

如影隨形的局部變量陰影一個實例變量。

一個instnace變量陰影從其父項的繼承變量。

grid = memory.getGrid(); 

當你寫這個,覆蓋以前的值。

+0

因此,在這種情況下,對於這個特定的代碼段,它不會以任何方式影響代碼?只是重新分配? – user3081519

+0

因此,頂部定義的變量內存和網格是實例變量誰的範圍是類和內存和構造函數中的網格是...構造函數的本地?這是否意味着構造函數是一個具有自己範圍的方法? – user3081519

+0

@ user3081519首先在類中初始化並在構造函數中重寫。沒有範圍在這裏。 –

0

您可以通過多種方式初始化成員變量。您已經初始化變量兩次。當它被聲明時,並在構造函數中。這兩個地方都沒有必要去做。當您在聲明中初始化成員變量時,將在每構造函數調用中對進行初始化。該錯誤可能與變量初始化的順序有關。

相關問題