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

为什么将静态方法视为方法?

昌正奇
2023-03-14
问题内容

我正在为某门课程的一些代码编写解释,并且偶然使用了这些单词method并且function可以互换使用。我决定回过头来修正措辞,但在我的理解上遇到了一个漏洞。

据我了解,子例程是一个function如果它不作用于一个类的实例(其作用仅限于其显式输入/输出),并且是一个method如果它作用于一个类的实例(它可能带有消除导致实例不纯的副作用)。

这里有一个很好的讨论主题。请注意,根据接受的答案的定义,静态method实际上应该是一个函数,因为永远不会隐式传递实例,并且它不能访问任何实例的成员。

考虑到这一点,静态不应该methods是函数吗?

根据它们的定义,它们不作用于类的特定实例;他们只是因为关系而“束缚”在班上。我见过一些好看的网站,尽管它们将静态子例程称为“方法”(Oracle,Fredosaurus,ProgrammingSimplified),所以它们要么都忽略了术语,要么我就遗漏了一些东西(我猜是后者) 。

我想确保我使用的措词正确。
有人可以清除吗?


问题答案:

8.4.3.2中的引号可能有帮助:

声明的static方法称为 类方法

没有声明的static方法称为 实例方法 […]。

  • 类方法:与一个类相关联。
  • 实例方法:与实例关联。

Java只希望您“思考面向对象”。同样,静态方法可以访问可能包含状态的周围环境。在某种程度上,该类就像一个对象本身。



 类似资料:
  • 根据我的理解,如果子例程不作用于类的实例(其作用仅限于显式输入/输出),则它是;如果子例程作用于类的实例,则它是(它可能会对实例产生副作用,使其不纯)。 关于这个话题,这里有一个很好的讨论。请注意,根据接受答案的定义,静态实际上应该是一个函数,因为实例从不隐式传递,而且它不能访问任何实例的成员。 不过,考虑到这一点,静态实际上不应该是函数吗? 我想确保我使用了正确的措辞。 有人能澄清一下吗?

  • 新的py魅力版本(3.1.3社区版)建议将不适用于当前对象状态的方法转换为静态。 实际原因是什么?某种微性能(或内存)优化?

  • 问题内容: 如果该方法可以声明为静态方法,则会向编译器发出警告。 [edit] Eclipse帮助中的确切引号,重点是私有和最终的: 启用后,编译器将为私有或最终方法(仅引用静态成员)发出错误或警告。 是的,我知道我可以将其关闭,但是我想知道打开它的原因吗? 为什么将每个方法都声明为静态是一件好事? 这会给性能带来任何好处吗?(在移动域中) 指出一种方法是静态的,我想表明您不使用任何实例变量,因此

  • 伙计们,我有一个简单但令人讨厌的问题。据我所知,基本上意味着,对于该类的每个实例,这个方法将是相同的,如果我们改变它,这将改变该类的每个实例,它也被称为类方法。那么,如果我有一个类,它实现了某种格式的方法,让我们说: 为什么不能设置为静态?因为该类的每个实例的格式都是相同的。。。?

  • 问题内容: 我很困惑为什么不允许以下内容: 我知道为什么接口中的方法不能是静态的,但是为什么覆盖方法不能是静态的? 我希望所有类都可以实现该方法,但目前仅限于如果已经实例化了该对象而无法调用该方法,则只能调用该方法… **_更新: _ 感谢您的回答,我现在对此有了更好的了解。基本上,我不应该尝试使实用程序类(或与此相关的工厂类)实现接口(或者至少不是这样)。 问题答案: 在Java中调用静态方法要

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