这是阴影变量的情况吗?

时间:2013-12-21 08:18:56

标签: java debugging variables scope

完全是编程新手。有一个难以调试的错误。试图修复它 最近几天。这样做让我自己几乎处于歇斯底里状态。决定坐下来,随便在随机页面上阅读Java书籍以平静下来。这个页面是关于变量阴影。然后我突然意识到我在代码中有这个废话 我两次声明相同的变量。我删除了它,这个bug似乎在蒸发。

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());  
    }

那你们觉得怎么样?这真的是影子案吗?

2 个答案:

答案 0 :(得分:0)

声明中没有阴影概念。

当具有相同名称且具有不同范围的变量或父和子具有相同的变量名称并访问它们时,阴影就会出现。

可能性是,

隐藏局部变量阴影实例变量。

一个实例变量阴影来自其父项的继承变量。

   grid = memory.getGrid(); 

当你写这个时,先前的值被重写。

答案 1 :(得分:0)

您可以通过多种方式初始化成员变量。您已将变量初始化两次。当它被声明时,在构造函数中。没有必要在两个地方都这样做。在声明时初始化成员变量时,它将在每个构造函数调用期间初始化。该错误可能与变量初始化的顺序有关。