静态变量/方法何时何地有用?

时间:2017-08-14 18:47:37

标签: java

除非该类是私有的或是Java API的一部分,否则我不认为使用静态作为OOP的一部分是有利的。

我唯一一次看到使用静态是有用的是每当你创建一个相同类型的新对象时你需要一个对象增量器。

例如:

public class Duck {
    static int duckCount = 0;
    private String name;

public Duck(String name) {
    this.name = name;
    duckCount++;
    }
}

public class DuckTesting {
public static void main(String[] args) {
    System.out.println(Duck.duckCount);
    Duck one = new Duck("Barbie");
    System.out.println(Duck.duckCount);
    Duck two = new Duck("Ken");
    System.out.println(Duck.duckCount);
  }
}
  

输出:
  0
  1
  2

更新:在Java: when to use static methods/variable

中找到有用的答案

3 个答案:

答案 0 :(得分:1)

- 首次使用: 所以这里有一点例子: 让我们说我们需要创建人物档案,所以我们要创建一个名为profile的类 我们需要每个配置文件都有一个id

public class Profile{
int id;
String name;

public Profile(String name,int id)
{this.name=name;
this.id=id;}
}

这里的问题是:如何制作默认ID,每次创建个人资料时,它都会增加并拥有自己的个人ID?如下所示:

profile 1 :id=1
profile 2 : id=2 
profile 3: id=3 

无需手动创建!

为此,我们需要一个静态变量,这意味着该变量将由同一个类的所有对象共享:如果此变量等于1,则意味着在所有其他对象中具有相同类的对象将拥有它等于1!

让我们写一下这个

public class Profile{
int id;
String name;
//here is it! the first time it will have 1
static int idIncreaser=1;


public Profile(String name)
{this.id=this.idIncreaser; //so the first time the object will have id=1
this.idIncreaser++; //we'll increase it so the next created object will 
                    // have id=2
this.name=name;
}
}

关于一个静态方法,如果我们将在它中使用它,我们将它设置为静态 主类或我们希望它像我们的idIncreaser

一样做同样的工作

- 第二次使用:如果你有静态变量或静态方法,你可以在不创建对象的情况下访问它,这意味着你可以这样做:

int a=Profile.idIncreaser; //note that the 'p' is in uppercase to be able to acces the class !

一般来说:请注意,此类的所有对象都共享一个静态变量/方法,并且可以通过实例化或创建任何对象来访问它

答案 1 :(得分:0)

当您不喜欢新关键字时,OOP中的静态方法应仅用于“构建器”:

public class ABC {
    private final int a;
    private final int b;

    public ABC(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public static ABC with(int a, int b) {
        return new ABC(a,b);
    }
} 

您可以将ABC类实例化为:

ABC abc = new ABC(1, 2);

ABC abc1 = ABC.with(1, 2);

你喜欢什么样的风格。 在OOP中没有静态方法的位置。 还有每个私有方法 - 新类的候选者,因为每个私有方法都不可重用。 当你在里面创建大量具有相同数据的对象时,静态常量也可用于内存经济,加速。

答案 2 :(得分:0)

当需要阻止类的实例(对象)在类中使用某些方法时,静态方法非常有用,同时你需要通过类本身使用这些方法