正如我的名字所示,我是一名.NET开发人员,但我对Java的兴趣日益浓厚,我有兴趣了解更多有关其他语言的知识,因为这有助于我更多地了解编程。
无论如何,我的问题是:不接受参数/使用状态的方法(这只是方法中的参数,如果我错了,请纠正我)建议为静态。静态和无参数方法之间的关系/链接是什么?如果将Person对象传递给方法,并且不编辑该对象的状态(例如其属性),则不使用state意味着 - 这是我的理解。
我不介意任何Java特定的答案。
由于
答案 0 :(得分:3)
“静态和无参数方法之间的关系/链接是什么?”
无。
“建议不使用参数/使用状态...的方法是静态的”
真的?通过谁?你能提供链接或报价吗?
静态意味着该方法属于该类 - 作为一个整体 - 而不是该类的任何特定对象。因此,静态方法只能处理静态变量,而不能处理实例变量。
无参数并不意味着什么。可能该方法仅处理实例变量或仅处理静态变量。或者它返回一个常量。或者它有一些私有的方法计算。例如,它可以创建一个套接字,使用HTTP进行读取,并销毁套接字。没有参数;没有实例变量。
答案 1 :(得分:2)
static
方法与传入参数的方法之间没有联系。 static
方法是CLASS级别方法,而不是Java中的INSTANCE级别。 static
方法与声明它们的类相关联,而不是那些类的实例。
答案 2 :(得分:2)
静态和无参数方法之间没有关系。
静态方法是不访问接收类中的实例状态的方法(因此不需要与特定实例关联)。它可以很容易地采取参数:
public class Calculator
{
public static int Add(int a, int b) { return a + b; } // does not need any Calculator state
}
静态方法可以访问其参数(如果允许,可以修改它们的状态):
public class Officialdom
{
public static void Rename(Person person) { person.Name = "Bob"; } // does not need any Officialdom state
}
相反,无参数方法可能需要访问接收器状态,因此是一个实例(非静态)方法:
public class Spline
{
private bool _isReticulated;
public void Reticulate()
{
_isReticulated = true; // does need Spline state
}
}
(我在C#中发布了代码示例,因为这与语言无关; Java中也适用相同的概念和区别,可能会有一些关键字更改。)
答案 3 :(得分:2)
一般原则是方法不应该访问超出需要的数据。这是成员变量通常是私有的原因之一,OO使用封装来隐藏来自系统其他部分的数据和代码。
当你有一个不需要访问该类变量的函数时,有些人建议使该方法保持静态。
函数是否具有参数不会影响它是否可以访问实例方法。