无参数方法/静态

时间:2010-01-20 22:19:41

标签: java

正如我的名字所示,我是一名.NET开发人员,但我对Java的兴趣日益浓厚,我有兴趣了解更多有关其他语言的知识,因为这有助于我更多地了解编程。

无论如何,我的问题是:不接受参数/使用状态的方法(这只是方法中的参数,如果我错了,请纠正我)建议为静态。静态和无参数方法之间的关系/链接是什么?如果将Person对象传递给方法,并且不编辑该对象的状态(例如其属性),则不使用state意味着 - 这是我的理解。

我不介意任何Java特定的答案。

由于

4 个答案:

答案 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使用封装来隐藏来自系统其他部分的数据和代码。

当你有一个不需要访问该类变量的函数时,有些人建议使该方法保持静态。

函数是否具有参数不会影响它是否可以访问实例方法。