当前位置: 首页 > 知识库问答 >
问题:

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

须景辉
2023-03-14

除非类是私有的或者是Java API的一部分,否则我认为使用static不像使用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);
  }
}

更新:在Java中找到有用的答案:何时使用静态方法/变量

共有1个答案

万俟招
2023-03-14

-第一个用法:这里有一个小例子:假设我们需要创建people profile,所以我们将创建一个名为profile的类,并且我们需要每个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;
}
}

关于一个静态方法,如果我们要在main类中使用它,或者我们想让它像idIncreaser一样做同样的工作,我们就让它成为静态的

-第二个用途:如果您有一个静态变量或静态方法,您可以在不创建对象的情况下访问它,这意味着您可以:

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

一般情况下:注意静态变量/方法由该类的所有对象共享,并且可以在实例化或创建任何对象之后访问

 类似资料:
  • 我不知道什么时候在程序中使用一个静态/非静态变量。 我理解非静态/静态变量之间的区别,但我只是不知道何时使用每一个变量。那么在上面的代码中,为什么函数不能是静态的呢?(什么时候应该是静态的?)

  • 我希望能够将类实例保存到公共静态变量中,但我不知道如何在Kotlin中做到这一点。

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

  • 问题内容: 我想知道静态变量何时初始化为其默认值。加载类时,先创建(分配)静态变量,然后执行静态初始化程序和声明中的初始化是否正确?在什么时候给出默认值?这导致前向参考的问题。 另外,如果你可以参考“ 为什么没有及时初始化静态字段?”这一问题进行解释,尤其是Kevin Brock在同一网站上给出的答案。我不明白第三点。 问题答案: 从请参阅Java静态变量方法: 它是一个属于类而不属于对象(实例)

  • 问题内容: 我已经定义了一个对象并声明了一个静态变量。在该方法中,当我尝试打印实例和类变量时,两者都打印相同的值。 不是实例变量吗?它应该打印0而不是50吗? 问题答案: 不,只有一个变量-您尚未声明任何实例变量。 不幸的是,Java允许您访问静态成员,就像通过相关类型的引用访问静态成员一样。这是IMO的设计缺陷,某些IDE(例如Eclipse)允许您将其标记为警告或错误- 但这是语言的一部分。您

  • 问题内容: 我想知道何时使用静态方法?假设我有一个带有几个和的类,一个或两个方法,并且我希望这些方法只能在该类的实例对象上调用。这是否意味着我应该使用静态方法? 例如 要么 我很困惑! 问题答案: 一个经验法则:问自己“即使尚未构建Obj,调用此方法是否有意义?” 如果是这样,那肯定是静态的。 因此,在一个类中,Car你可能有一个静态的方法,因为即使没有人制造过汽车,也可能想知道35mpg转换为什