我想知道什么时候使用静态方法?假设我有一个类,有几个getter和setter,一个或两个方法,我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法?

例子:

Obj x = new Obj();
x.someMethod();

或:

Obj.someMethod(); // Is this the static way?

我很困惑!


当前回答

在eclipse中,您可以启用一个警告,它可以帮助您检测潜在的静态方法。(在高亮线上方是另一个我忘记高亮的线)

其他回答

在eclipse中,您可以启用一个警告,它可以帮助您检测潜在的静态方法。(在高亮线上方是另一个我忘记高亮的线)

只在以下场景下定义静态方法:

如果您正在编写实用程序类,并且它们不应该被更改。 如果该方法没有使用任何实例变量。 如果任何操作不依赖于实例创建。 如果有一些代码可以很容易地被所有实例方法共享,那么将这些代码提取到静态方法中。 如果您确定方法的定义永远不会被更改或重写。因为静态方法不能被覆盖。

静态方法有两个主要目的:

用于不需要任何对象状态的实用程序或辅助方法。 由于不需要访问实例变量,具有静态 方法消除了调用方实例化对象的需要 只需要调用这个方法。 为了所有人共享的状态 类的实例,比如计数器。所有实例必须共享 相同的状态。仅仅使用该状态的方法应该是静态的 好。

我想知道什么时候使用静态方法?

静态方法的一个常见用途是访问静态字段。 但是你可以有静态方法,而不需要引用静态变量。不引用静态变量的Helper方法可以在一些java类中找到,如java.lang. math 公共静态int min(int a, int b) { 返回(a <= b) ?A: b; } 另一个用例,我认为这些方法与同步方法相结合是在多线程环境中实现类级锁定。

假设我有一个类,有几个getter和setter,一个或两个方法,我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法?

如果你需要访问类的实例对象上的方法,你的方法应该是非静态的。

Oracle文档页提供了更多详细信息。

不是所有的实例和类变量和方法的组合都被允许:

实例方法可以直接访问实例变量和实例方法。 实例方法可以直接访问类变量和类方法。 类方法可以直接访问类变量和类方法。 类方法不能直接访问实例变量或实例方法——它们必须使用对象引用。而且,类方法不能使用this关键字,因为没有this的实例可以引用。

静态方法不需要在对象上调用,这就是你使用它的时候。例如:你的Main()是一个静态的,你没有创建一个对象来调用它。