Java NetBeans中类方法调用参数不生效问题求助
问题分析与解决方案
嗨,我一眼就找到问题所在啦!你遇到的核心问题是创建了两个完全独立的Teszt类实例,导致你精心配置的属性根本没被用到。
问题根源
你在主程序里做了两件关键的事:
- 创建了
Teszt x实例,并且给它的mana等所有属性都赋值了正确的值(包括mana=25) - 又新建了一个
Teszt TesztObject = new Teszt()实例,这个全新的实例所有属性都是类的默认初始值(比如mana默认是0)
然后你调用的是TesztObject.fagy_csapas(),这自然会使用这个新实例的默认mana值,而不是你之前配置好的x的mana=25。
修复后的主程序代码
只需要删除多余的TesztObject实例,直接调用你已经配置好的x对象的方法就行:
package tesztelő; public class Tesztelő { public static void main(String[] args) { Teszt x=new Teszt(); x.maxhp=30; x.hp=30; x.maxmana=25; x.mana=25; x.str=3; x.vit=3; x.dex=4; x.luc=1; x.wis=3; x.intel=4; x.atk_slash_min=1; x.atk_slash_max=8; x.atk_pierce_min=1; x.atk_pierce_max=6; x.atk_blunt_min=1; x.atk_blunt_max=4; // 直接调用已经配置好的x对象的方法 x.fagy_csapas(); System.out.println(x.mana); } }
额外的优化建议
为了避免以后再犯类似的错误,给你两个实用小建议:
- 使用构造函数初始化对象:可以在
Teszt类里写一个带参数的构造函数,创建对象时就能直接初始化所有属性,不用逐个赋值,也不容易搞混实例。
示例构造函数:
然后创建对象时可以简化为:public Teszt(int maxhp, int hp, int maxmana, int mana, int str, int vit, int dex, int luc, int wis, int intel, int atk_slash_min, int atk_slash_max, int atk_pierce_min, int atk_pierce_max, int atk_blunt_min, int atk_blunt_max) { this.maxhp = maxhp; this.hp = hp; this.maxmana = maxmana; this.mana = mana; this.str = str; this.vit = vit; this.dex = dex; this.luc = luc; this.wis = wis; this.intel = intel; this.atk_slash_min = atk_slash_min; this.atk_slash_max = atk_slash_max; this.atk_pierce_min = atk_pierce_min; this.atk_pierce_max = atk_pierce_max; this.atk_blunt_min = atk_blunt_min; this.atk_blunt_max = atk_blunt_max; }Teszt x = new Teszt(30, 30, 25, 25, 3, 3, 4, 1, 3, 4, 1, 8, 1, 6, 1, 4); - 遵循封装原则:把
Teszt类里的字段设置为private,然后提供对应的getter和setter方法,这样能更好地控制属性的访问和修改,让代码更健壮、易维护。
内容的提问来源于stack exchange,提问作者Tatsuya Suou
相关产品推荐
相关产品推荐

