当前位置: 首页 > 面试题库 >

JAVA:正确访问静态方法

袁何平
2023-03-14
问题内容

我是JAVA的新手,我喜欢尝试并理解所有内容。

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

 hero Mike = new hero();

 Mike.returnHp();

该程序运行良好,但是我注意到Eclipse发出警告,指出“应以静态方式访问hero类型的静态方法。” 当我接受自动修复时,它会更改为“
Mike.returnHp();”。到“ hero.returnHp();”。

所以我有两个问题:

1)这有什么好处?

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

谢谢!


问题答案:

首先,我想指出关键字“静态”的含义。

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

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

Eclipse之所以希望您以静态方式访问静态方法,是因为它使您和随后的程序员可以看到您正在访问的方法是静态的(这有助于防止错误)。该函数将以您执行任一种方式运行,但正确的方法是以静态方式访问静态函数。请记住,如果您调用静态方法,则无论您从哪个实例变量调用它(Tim.returnHp,Jim.returnHp,Mike.returnHp等),您都将从hero类中调用相同的函数,并且会看到完全相同的函数行为,无论您来自谁。

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

您能否解释您要做什么,以便我们提供更具体的反馈?returnHp()很有可能不应该是静态的。

那是“回报命中点”吗?如果是,那么您就不希望它是静态的,因为英雄拥有的生命值是英雄状态的一部分,并且静态方法是无状态的。(请像当前状态那样考虑状态-
存活,死亡,受伤,攻击,防御,上述情况的组合等等。)我建议您进入Hero类,并将returnHp更改为非静态方法。

现在……我知道您没有提出要求,但是我想向您提供一些建议:

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

杰夫



 类似资料:
  • 问题内容: 我刚开始学习Java,并编写了一个使用静态字段进行测试的类。一切正常,但是在Eclipse中,我看到一个图标,将其悬停时显示为:“应该以 静态方式访问 CarCounter类型的静态方法getCounter 。” 那么正确的方法是什么? 这是课程: 这是我尝试访问变量计数器的地方: 问题答案: 静态字段和方法不属于特定的对象,而是属于一个类,因此您应该从该类而不是对象中访问它们: 并不

  • 我有一个关于静态方法访问的问题。我有一个类,其中有4个静态方法。如代码所示: } 我正在从下面的代码调用来自onLoadShipperDetailsListCtrl()的setSortingEnable()方法: } 因此,如果我从其他类调用setSortingEnabled()方法,我会认为它是公共的,而其他方法是私有的,但它会给我一个错误:Java . lang . nosuchmethode

  • 本文向大家介绍SpringMVC访问静态资源的方法,包括了SpringMVC访问静态资源的方法的使用技巧和注意事项,需要的朋友参考一下 在SpringMVC中常用的就是Controller与View。但是我们常常会需要访问静态资源,如html,js,css,image等。 默认的访问的URL都会被DispatcherServlet所拦截,但是我们希望静态资源可以直接访问。该肿么办呢? 在配置文件:

  • null 从我的类中调用这些代码的工作方式与我预期的一样。但是,我想在Kotlin子类之外调用其中的一个方法。 如果从不同的Kotlin类尝试,则会出现以下编译错误: 未解析得引用:completeWakefulIntent

  • 我的目标是创建一个抽象类,它的静态方法必须被实现,但是由于静态方法不能被抽象,我有一些问题。 这就是我提出的解决方案: 我写这篇文章是因为我找不到任何等价的答案,这让我想知道这在Java中是否是惯用的。