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

将方法声明为静态有什么好处

刘安志
2023-03-14
问题内容

如果该方法可以声明为静态方法,则会向编译器发出警告。

[edit] Eclipse帮助中的确切引号,重点是私有和最终的:

启用后,编译器将为私有或最终方法(仅引用静态成员)发出错误或警告。

是的,我知道我可以将其关闭,但是我想知道打开它的原因吗?

为什么将每个方法都声明为静态是一件好事?

这会给性能带来任何好处吗?(在移动域中)

指出一种方法是静态的,我想表明您不使用任何实例变量,因此可以移至utils样式类吗?

在一天结束时,我应该只关闭“忽略”功能还是应该修复它给我的100多个警告?

您是否认为这只是多余的关键字而使代码变得肮脏,因为编译器还是会内联这些方法?(有点像您没有声明每个变量都可以终止但可以声明)。


问题答案:

每当编写方法时,您都将在给定范围内履行合同。范围越窄,编写错误的机会就越小。

当方法是静态的时,您不能访问非静态成员。因此,您的范围更窄。因此,如果您不需要并且永远也不需要(甚至在子类中)非静态成员来履行您的合同,为什么要为您的方法提供对这些字段的访问权限?static在这种情况下声明该方法将使编译器检查您是否使用了不打算使用的成员。

而且,它将帮助阅读您的代码的人们了解合同的性质。

这就是为什么static在实际上实现静态协定时声明一个方法很好的原因。

在某些情况下,您的方法仅表示相对于类实例的某种含义,并且碰巧其实现实际上并未使用任何非静态字段或实例。在这种情况下,您不会标记方法static。

不使用static关键字的示例:

  • 一个扩展钩子,什么都不做(但是可以对子类中的实例数据做一些事情)
  • 一个非常简单的默认行为意味着可以在子类中进行自定义。
  • 事件处理程序的实现:实现会随事件处理程序的类而变化,但不会使用事件处理程序实例的任何属性。


 类似资料:
  • 我最近在Eclipse中查看了我的警告,发现了这样一个警告: 如果方法可以声明为静态,它将给出编译器警告。 [编辑]Eclipse帮助中的确切引用,强调私有和最终: 如果启用,编译器将为私有或最终的方法以及仅引用静态成员的方法发出错误或警告。 是的。我知道我可以关掉它,但我想知道打开它的原因? 为什么将所有可能的方法声明为静态方法是一件好事呢? 这会给性能带来什么好处吗?(在移动域中) 指出一个方

  • 问题内容: 为什么将Java常量声明为static? 在此我了解使用final吗?购买为什么它必须是静态的?为什么它应该是类变量,而不是实例变量? 问题答案: 如果它可以随类的实例而变化,那么显然它不是 常数 。为的每个实例获得不同的pi值意味着什么(甚至不允许构造实例)?还是每个实例的大小写不区分大小写?

  • 问题内容: 我试图找到为什么不能将类创建为静态类的原因?喜欢: 问题答案: 在Java中,关键字通常将一个方法或字段标记为不存在,而不是每个类实例一次,而是一次。一个类一旦存在就已经存在,因此实际上,所有类都以这种方式是“静态的”,并且所有对象都是该类的实例。 确实对 内部 类具有含义,这是完全不同的:通常,内部类实例可以访问与其绑定的外部类实例的成员,但是如果内部类为,则它没有这样的引用并且可以

  • 问题内容: 这可能表明我缺乏Java理解,但是我想知道为什么在大多数MapReduce程序中,映射器和reducer类都声明为静态的? 问题答案: 当将mapper和reducer类声明为另一个类的内部类时,必须将它们声明为静态的,以便它们不依赖于父类。 Hadoop使用反射为每个映射创建该类的实例或减少运行的任务。创建的新实例需要一个零参数构造函数(否则它将如何知道要传递的内容)。 通过声明内部

  • 问题内容: 我注意到有些人喜欢将对象声明为它实现的接口之一, 即使在变量的范围内,也不必将其视为接口 ,例如,没有期望接口的外部API。 例如: 或者你可以做 并避免完全导入。 与类本身(第二个)相反,通过接口(上面的第一个)声明它有什么好处? 谢谢 问题答案: 如果以后不使用该变量,则没有优点/缺点。使用接口而不是对象的原因是为了提供更大的灵活性,但是,如果不使用该变量,则与性能方面没有什么区别

  • 问题内容: 我正在为某门课程的一些代码编写解释,并且偶然使用了这些单词并且可以互换使用。我决定回过头来修正措辞,但在我的理解上遇到了一个漏洞。 据我了解,子例程是一个如果它不作用于一个类的实例(其作用仅限于其显式输入/输出),并且是一个如果它作用于一个类的实例(它可能带有消除导致实例不纯的副作用)。 这里有一个很好的讨论主题。请注意,根据接受的答案的定义,静态实际上应该是一个函数,因为永远不会隐式