生成方法中无法识别变量

时间:2015-03-09 04:45:41

标签: java oop variables constructor

我在无参数构造函数SandBox sb中创建了AsteroidGame(),但是当我尝试向sb添加对象时,在我的generate方法中找不到变量SandBox 。我对哪里出错了?

    public static void main(String[] args) 
    {
        new AsteroidGame();
    }

    public AsteroidGame()
    {      
        //Create SandBox
        SandBox sb = new SandBox();
        sb.init(this);
    }

    public void generate() 
    {
        //Instantiate Rocket and add it to Sandbox
        Dimension dime = sb.getPanelBounds();
        Rocket rock = new Rocket(dime.width/2, dime.height/2);
        sb.addBlob(rock);
}

3 个答案:

答案 0 :(得分:2)

您的Sanbox变量是局部变量意味着它在构造函数外部不可见。如果您想在generate函数中使用它,则必须将其转换为您班级的field

答案 1 :(得分:2)

你可以这样做Declare SandBox as instance/class variable

    SandBox sb; // Declare SandBox as instance/class variable
    public static void main(String[] args) 
        {
            new AsteroidGame();
        }

        public AsteroidGame()
        {      
            //Create SandBox
            sb = new SandBox();
            sb.init(this);
        }

        public void generate() 
        {
            //Instantiate Rocket and add it to Sandbox
            Dimension dime = sb.getPanelBounds();
            Rocket rock = new Rocket(dime.width/2, dime.height/2);
            sb.addBlob(rock); 
    }

Create a new local variable in generate()method:

public static void main(String[] args) 
    {
        new AsteroidGame();
    }

    public AsteroidGame()
    {      
        //Create SandBox
        SandBox sb = new SandBox();
        sb.init(this);
    }

    public void generate() 
    {
        // Create a new local variable here
        SandBox sb = new SandBox();
        Dimension dime = sb.getPanelBounds();
        Rocket rock = new Rocket(dime.width/2, dime.height/2);
        sb.addBlob(rock); 
}

答案 2 :(得分:0)

构造函数是初始化不属于任何类的同一个类的对象。

  

java中的构造函数是一种特殊类型的方法,用于初始化对象。

sb方法本身中创建generate

如果sb是字段成员,请使用sb = new SandBox();代替SandBox sb = new SandBox();