为什么静态方法被认为是一种方法?

我正在为一门课程的一些代码写一篇解释,并且已经意外地使用了单词methodfunction 。 我决定回去修改措辞,但在我的理解中遇到了一个漏洞。

据我所知,一个子程序是一个function如果它不作用于一个类的实例(其效果仅限于其明确的输入/输出),并且是一个method如果它在类的一个实例上运行可能会对不纯的实例产生副作用)。

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

有了这个想法,不应该静态methods实际上是功能?

根据他们的定义,他们不会针对某个阶层的特定事例采取行动; 他们只因为关系而与班级“捆绑”。 我已经看到一些看起来很好看的站点,它们把静态子程序称为“方法”(Oracle,Fredosaurus,ProgrammingSimplified),所以他们都忽略了术语,或者我错过了一些东西(我的猜测是后者) 。

我想确保我使用正确的措辞。
任何人都可以清楚这一点吗?


8.4.3.2中的这句话可能有助于:

被声明为static方法称为类方法。

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

  • 类方法:与一个类关联。
  • 实例方法:与一个实例关联。
  • Java只是希望你“思考面向对象”。 此外,静态方法可以访问可能包含状态的周围范围。 在某种程度上,这个类就像一个对象本身。


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


    静态方法并不完全是函数,其差别很微妙,但很重要。

    仅使用给定输入参数的静态方法本质上是一个函数。

    但是静态方法可能访问静态变量和其他静态函数(也使用静态变量),因此静态方法可能具有与根据定义无状态的函数完全不同的状态。 (附录:虽然程序员通常不会严格使用“函数”作为定义,但计算机科学中的严格函数只能访问输入参数)。 因此,定义这种访问静态字段的情况是无法说静态方法总是功能的。

    证明使用“静态方法”的另一个区别是你可以在C中定义全局函数和全局变量,它们可以在任何地方访问。 如果您无法访问包含静态方法的类,则方法也无法访问。 因此,“静态方法”与全局功能相比,其设计范围受到限制。

    链接地址: http://www.djcxy.com/p/2845.html

    上一篇: Why is a static method considered a method?

    下一篇: Why JavaScript says that a number is not a number?