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

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

据我所知,子例程是一个如果它不作用于类的实例(它的影响仅限于其显式输入/输出),并且是一个如果它对类的实例进行操作(它可能会对实例执行副作用,使其不纯)。functionmethod

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

但是,有了这个想法,静态实际上不应该是函数吗?methods

根据它们的定义,它们不对类的特定实例起作用;他们只是因为关系而“束缚”到阶级。我见过一些好看的网站,它们将静态子例程称为“方法”(OracleFredosaurusProgrammingSimplified),所以要么他们都忽略了术语,要么我错过了一些东西(我的猜测是后者)。

我想确保我使用正确的措辞。
任何人都可以清除它吗?


答案 1

8.4.3.2 中的这句话可能会有所帮助:

声明的方法称为类方法static

未声明的方法称为实例方法 [...]。static

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

Java只是希望你“面向对象思考”。此外,静态方法可以访问可能包括状态的周围作用域。在某种程度上,类就像一个对象本身。


答案 2

简单的答案是,当Java决定将所有内容都称为“方法”时,他们并不关心理论计算机科学中函数和方法之间的区别。