【问题标题】:Is this a case of shadowed variables?这是阴影变量的情况吗?
【发布时间】:2014-01-10 02:33:25
【问题描述】:

对编程完全陌生。有一个难以调试的错误。试图修复它 最近几天。这样做让自己几乎歇斯底里。决定坐下来,随便翻翻翻页的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());  
    }

那你们觉得呢?这真的是阴影案例吗?

【问题讨论】:

    标签: java debugging variables scope


    【解决方案1】:

    您的声明中没有阴影概念。

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

    可能性是,

    给局部变量加阴影阴影一个实例变量。

    实例变量遮蔽从其父级继承的变量。

       grid = memory.getGrid(); 
    

    当你写这个时,之前的值被覆盖了。

    【讨论】:

    • 那么在这种情况下,对于这个特定的 sn-p,它不会以任何方式影响代码吗?只是重新分配吗?
    • 所以上面定义的变量 memory 和 grid 是实例变量,其作用域是类,构造函数中的 memory 和 grid 是......构造函数的局部变量?这是否意味着构造函数是一个有自己作用域的方法?
    • @user3081519 首先在类中初始化并在构造函数中覆盖。这里没有范围。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 2020-05-30
      • 1970-01-01
      • 2022-11-28
      • 2013-06-15
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多