在创建一个类来保存变量时,变量应该始终是静态的吗?

时间:2015-07-16 21:22:54

标签: java class

假设我想创建一个类来保存一组可以从多个其他类和实例访问的整数。我不希望它们恢复到编译代码时的价值。这是否意味着他们必须是静态的,以防止他们恢复原来的价值?例如

原始统计数据持有课程:

public class Stats() {

    public static int numOne = 0;
    public static int numTwo = 5;
    public static int numThree = 3
    //etc...

}

在两个地方召唤它。这里:

public class exampleClass() {

    private Stats stats = new Stats();
    stats.numOne += 5;
    //More variable changes.

}

同样在这里:

public class exampleClassTwo() {

    private Stats stats = new Stats();
    stats.numOne -= 3;
    //More variable changes.

}

如果变量不是静态的,这些调用会将变量重置为原始类值吗?如果是这样,这是否意味着他们应该永远是静态的?

6 个答案:

答案 0 :(得分:1)

不,变量将在没有静态修饰符的情况下保持状态

答案 1 :(得分:0)

是的,当您实例化一个对象时,变量将在它们不是静态时初始化为类值。

当变量具有static关键字时,该变量值将持续存在于所有实例上:您调用它的两个位置都创建一个对象,两个对象的静态变量值都相同(即使它们已更改)。

没有static关键字的变量对于实例是唯一的:在一个对象上更改它不会影响它在另一个对象上的值。

有关详细信息,请参阅此处: What does the 'static' keyword do in a class?

答案 2 :(得分:0)

没有。您可以使用静态关键字来使用这些值而无需初始化它们。

public class Stats() {

    public static int numOne = 0;
    public static int numTwo = 5;
    public static int numThree = 3
    //etc...
}

public class exampleClass() {

    int a = 0;
    a += Stats.numThree;
    System.out.println(a);
}

>>> 3;

答案 3 :(得分:0)

确实不需要静态属性,每个类实例都将包含在实例创建时初始化的属性的私有副本,并记录所有后续修改,直到删除对象(在java中它意味着不再引用)。

static的主要用途是存储常量或全局状态(例如单例实例)。

答案 4 :(得分:0)

做,

private Stats stats = new Stats();
    stats.numOne += 5; 

有点失败了将numOne作为静态的目的。 应以静态方式访问静态字段numOne,如下所示:Stats.numOne

静态变量是类变量,当我们想要在类的实例之间维护一个值时使用。因此,在各种函数中修改numOne的值将继续更改类变量numOne的值。运行以下代码以查看在类中具有类变量的效果:

public class StaticVarDemo {
    public static int staticCount =0 ;
    public StaticVarDemo(){
        staticCount++;
    }
    public static void main(String[] args) {
        new StaticVarDemo();
        StaticVarDemo.staticCount +=5;
        System.out.println("staticCount : " + StaticVarDemo.staticCount);
        new StaticVarDemo();
        new StaticVarDemo();
        System.out.println("staticCount : "+staticCount);
    }
} 

它会给出输出: staticCount:6 staticCount:8

答案 5 :(得分:0)

经过一些研究,似乎单身人士完成了这项工作。创建一个单一的实例,但多次调用它。

见这里: http://www.tutorialspoint.com/java/java_using_singleton.htm