JAVA:正确访问静态方法

Her*_*tus 8 java static object

我是JAVA的新手,我喜欢尝试理解一切.

在JAVA中访问静态方法"hero.returnHp()"时,我有以下内容:

 hero Mike = new hero();

 Mike.returnHp();
Run Code Online (Sandbox Code Playgroud)

该程序运行正常,但我注意到Eclipse有一个警告声明,"类型英雄的静态方法应该以静态方式访问." 当我接受自动修复时,它会改变"Mike.returnHp();" to"hero.returnHp();".

所以我有两个问题:

1)这有什么好处?

2)如果我创建了两个相同类型的对象,那么在以静态方式访问时如何指定返回哪个对象?

谢谢!

Man*_*ese 11

我首先要指出static关键字的含义.

静态变量每个类只存在一次 - 也就是说,如果使用静态变量创建一个类,那么该类的所有实例将共享该一个变量.此外,如果它是一个公共静态变量,那么任何人都可以访问该变量而无需首先创建该类的实例 - 他们只需调用Hero.staticVariableName;

静态方法/函数是无状态的.也就是说,它们仅作用于传递给方法/函数的参数提供的信息(1),或者(2)静态变量(上面命名),或者(3)硬编码到方法/函数中(例如,创建一个静态函数以返回"hello" - 然后将"hello"硬编码到函数中.

Eclipse希望您以静态方式访问静态方法的原因是因为它允许您和后续程序员看到您正在访问的方法是静态的(这有助于防止错误).该函数将以您执行的任一方式运行,但正确的方法是以静态方式访问静态函数.请记住,如果你调用静态方法,无论你从哪个实例变量调用它(Tim.returnHp,Jim.returnHp,Mike.returnHp,无论如何),你都会从英雄类中调用相同的函数,你会看到完全相同的行为,无论你是谁叫它.

如果您创建了两个相同类型的对象,那么您可能无法指定在以静态方式访问时要返回的对象; 静态函数/方法将引用整个Hero类.

你能解释一下你想做什么,以便我们能提供更具体的反馈吗?returnHp()很可能不是静态的.

这是"回归生命值"吗?如果是,那么你不希望它是静态的,因为英雄拥有的生命值的数量是英雄状态的一部分,静态方法是无状态的.(想想状态就像现在的情况 - 活着,死了,受伤,攻击,防守,前面提到的一些组合等等)我建议进入Hero类并将returnHp改为非静态方法.

现在......我知道你没有问,但我想告诉你一件事:

类名(例如Hero)应该大写.实例变量名称(例如mike)应为小写.这是一种广泛接受的命名约定,它将提高代码的可读性.

杰夫