如何访问由构造函数生成的对象变量

我有 2 个按钮,1 个使用 round1rock 中的构造函数类,而其他 1 个尝试访问这些参数。我的代码有什么问题?


构造函数类


public ROCK(int hp, int stamina, int attack, int speed, String type){

   this.hp=hp;  

   this.stamina= stamina;

   this.attack= attack;

   this.speed = speed;

   this.type = type;

}

2个按钮:


private void continueRound1 (ActionEvent event){

       ROCK round1Rock= new ROCK( 500, 100, 100, 100, "Metamorphic");

    }

    private void Attack (ActionEvent event){

        round1Rock.hp = 12;


    }

我如何访问以前制作的对象?


米琪卡哇伊
浏览 116回答 4
4回答

小怪兽爱吃肉

当你定义private void continueRound1 (ActionEvent event){   ROCK round1Rock= new ROCK( 500, 100, 100, 100, "Metamorphic");}您ROCK round1Rock只是为函数定义continueRound1。要Attack访问该对象,您需要round1Rock在类级别上进行定义。尝试:ROCK round1Rock = null;private void continueRound1 (ActionEvent event){  round1Rock= new ROCK( 500, 100, 100, 100, "Metamorphic");}private void Attack (ActionEvent event){    round1Rock.hp = 12;}

鸿蒙传说

在类级别定义round1Rock,class someclass{   private ROCK round1Rock;          -----   private void continueRound1 (ActionEvent event){       round1Rock= new ROCK( 500, 100, 100, 100, "Metamorphic");    }    private void Attack (ActionEvent event){        round1Rock.hp = 12;    }           ------}

莫回无

而不是在 continueRound1 方法中创建一个新的 Rock 对象。您可以在类范围内创建新的 Rock 对象并设置私有访问。这将解决您的问题。附加提示:每次单击按钮时,您都会创建一个新对象。如果我编写程序无限期地单击按钮,这将导致OutOfMemoryError 。以下是我避免此问题的见解:我假设每个客户都需要新的摇滚乐。因此,在客户端类中创建一个 Empty Rock 对象。在您的客户端构造函数中,您可以使用岩石类型的默认值初始化岩石对象。getDefaultRockForType 将帮助您创建任意数量的岩石类型。因此,我们将客户端类中带有一些值的 Rock 对象的实现细节隐藏为 Rock 类中的标准化值。这是我的代码片段:Class Client {       private Rock round1Rock =  new Rock();       Client() {          round1Rock = round1Rock.getDefaultRockForType("Metamorphic");        }       private void continueRound1 (ActionEvent event){            round1Rock= round1Rock.getDefaultRockForType("Metamorphic");       }    private void Attack (ActionEvent event){        round1Rock.setHp(12);    }}在您的 Rock 类中,您可以提供由您的岩石类型决定的默认值。类摇滚:public Rock getDefaultRockForType(String type){   if(type.equals("Metamorphic")){         this.hp=500;           this.stamina= 100;         this.attack= 100;         this.speed = 100;         this.type = type;   }}

富国沪深

首先像这样声明 ROCK 的实例是全局的private ROCK round1Rock = null;private void continueRound1 (ActionEvent event){       round1Rock= new ROCK( 500, 100, 100, 100, "Metamorphic");    }    private void Attack (ActionEvent event){        round1Rock.hp = 12;    }在您的 Attack 动作侦听器中,您可能无法访问变量 hp,因为它可能是私有的,因此最好为 Rock 类创建 setter 和 getter 方法,然后使用它。摇滚类:public ROCK(int hp, int stamina, int attack, int speed, String type){   this.hp=hp;     this.stamina= stamina;   this.attack= attack;   this.speed = speed;   this.type = type;}public void setHP(int hp){   this.hp = hp}public void getHP(){  return hp;}然后在你的其他班级使用这个: private void Attack (ActionEvent event){            round1Rock.setHP(12); //this will update the value  }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java