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

为什么最好从该方法的类的实例中静态调用静态方法?

乜心思
2023-03-14
问题内容

如果我用Java创建类的实例,为什么最好静态地调用同一类的静态方法,而不是使用this.method()?

当我尝试通过this.staticMethod()从自定义类的构造函数中调用静态方法staticMethod()时,我收到Eclipse的警告。

public MyClass() { this.staticMethod(); }

public MyClass() { MyClass.staticMethod(); }

谁能解释为什么这是一件坏事?在我看来,编译器应该已经分配了对象的实例,因此静态分配内存将是不必要的开销。

编辑:

我听到的要点是,这主要是出于可读性,这是一种不好的做法,这是可以理解的。我真正想问的(尽管不是很清楚)是在调用MyClass.staticMethod()或this.staticMethod()之间的“编译”(如果有)之间有什么区别。


问题答案:

MyClass.staticMethod()清楚地表明您正在调用静态(不可重写)方法。

this.staticMethod()会误导读者以为这是一个实例方法。

staticMethod()也具有误导性(尽管我通常是这样做的)。

如果您认为人们不熟悉您的代码,则倾向于尝试使代码更清晰,在这种情况下,可以使用ClassName.method而不是instance.method来使代码更清晰。



 类似资料:
  • 我正在使用存储库模式并尝试建立模型之间的关系。当我尝试运行存储()方法(在控制器中),该方法试图使用用户()方法(与方模型建立关系)时,我收到以下错误消息: 非静态方法不应该静态调用::user(),假设$this来自不兼容的上下文 我不明白为什么在尝试运行user()relationship方法时会出现此错误,但所有其他方法(包括$this- 以下是相关代码:

  • 问题内容: 尝试在静态类中调用非静态方法时遇到错误。 无法从类型播放中静态引用非静态方法methodName() 我不能使该方法静态,因为这也给我一个错误。 此静态方法无法从xInterface隐藏实例方法 有什么办法可以在另一个静态方法中轮回调用非静态方法?(这两种方法位于单独的包和单独的类中)。 问题答案: 从静态方法中调用非静态方法的唯一方法是使类的实例包含非静态方法。根据定义,非静态方法是

  • 这个问题相当复杂,我不知道以前是否有人问过,因为我不知道如何在搜索框中表达这个问题。 下面是代码: 静态成员将在更多静态方法中再次使用,但我需要首先将其时区设置为“UTC”。有没有方法调用<code>。setTimeZone(“UTC”)一劳永逸?或者我必须调用<code>。setTimeZone(“UTC”)在每个静态方法中?

  • 我有一个类,其中有一些静态方法和一些非静态方法,所以当我试图从静态方法访问非静态方法时,我会遇到一个著名的错误。每当我搜索这个论坛,我得到的解决方案,当有两个类,从一个你试图达到另一个。我的问题是,如果它们在同一个类中,如何从静态方法调用非静态方法? 我试着用 但是我的方法包含发送Intent和finish(),所以如果我创建的对象不是finish,就不起作用。

  • 假设我有一个基类(具有一个名为)的虚拟方法)和300个子类:每个子类都有一个静态方法,外加一个重写。(请不要问为什么;这是在一个生产软件中,已经给出了,不能为了更好的重用而更改设计。实际上,那些子类是由一个代码生成器生成的,但现在这已经不相关了。) 根据应用程序的不同执行,需要初始化的(小)子集。换句话说,有一些数据是特定的所有实例共同共享或访问的。显然,将这些实体定义为成员/方法(因为它们由的所

  • 我知道在Java中,静态方法和实例方法一样是继承的,不同的是,当它们被重新声明时,父实现是隐藏的,而不是重写的。好吧,这有道理。但是,Java教程指出 接口中的静态方法从不继承。 然而,