我是JAVA新手,我喜欢尝试并理解一切。
在JAVA中访问静态方法“hero.returnHp()”时,我有以下内容:
hero Mike = new hero();
Mike.returnHp();
程序运行良好,但我注意到 Eclipse 有一条警告,指出“英雄类型的静态方法应该以静态方式访问”。当我接受自动修复时,它会更改“Mike.returnHp();”到“hero.returnHp();”。
所以我有两个问题:
1)这样做有什么好处?
2)如果我创建了两个相同类型的对象,如何指定以静态方式访问时返回哪一个?
Thanks!
我首先想指出关键字 static 的含义。
静态变量每个类只存在一次——也就是说,如果您创建一个带有静态变量的类,那么该类的所有实例都将共享该变量。此外,如果它是一个公共静态变量,那么任何人都可以访问该变量,而无需先创建该类的实例 - 他们只需调用 Hero.staticVariableName;
静态方法/函数是无国籍的。也就是说,它们仅对以下信息起作用:(1) 传递给方法/函数的参数提供的信息,或 (2) 静态变量(上面指定的)中的信息,或 (3) 硬编码到方法/函数中的信息(例如,您创建一个静态函数来返回“hello”——然后“hello”被硬编码到该函数中)。
Eclipse之所以希望你以静态的方式访问静态方法,是因为它可以让你和后续的程序员看到你正在访问的方法是静态的(这有助于防止错误)。无论您采用哪种方式,该函数都会运行,但正确的方法是以静态方式访问静态函数。请记住,如果您调用静态方法,无论您从哪个实例变量(Tim.returnHp、Jim.returnHp、Mike.returnHp 等)调用它,您都会从英雄类中调用相同的函数,并且您将看到完全相同的内容行为,无论你从谁那里称呼它。
如果您创建了两个相同类型的对象,那么您不能指定以静态方式访问时返回哪一个;静态函数/方法将引用整个 Hero 类。
您能否解释一下您正在尝试做什么,以便我们提供更具体的反馈? returnHp() 很可能不应该是静态的。
这就是“回复生命值”吗?如果是,那么您不希望它是静态的,因为英雄拥有的生命值是英雄状态的一部分,而静态方法是无状态的。 (将状态想象为当前状况 - 活着、死亡、受伤、攻击、防御、上述的某种组合等)我建议进入 Hero 类并将 returnHp 更改为非静态方法。
现在……我知道你没有问,但我想建议你一件事:
类名(例如 Hero)应大写。实例变量名(例如mike)应该小写。这是一种广泛接受的命名约定,它将提高代码的可读性。
Jeff
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)