5

在我的java程序中,我需要将最近的值存储在一个变量中,我的代码如下所示

public class Exmp2 
{

        int noOfInstances;
    public Exmp2() 
    {
        noOfInstances++;
    }
    public static void main(String[] args){
        Exmp2 e1=new Exmp2();
        System.out.println("No. of instances for sv1 : " + e1.noOfInstances);

        Exmp2 e2=new Exmp2();
        System.out.println("No. of instances for sv1 : "  + e2.noOfInstances);
        System.out.println("No. of instances for st2 : "  + e2.noOfInstances);

        Exmp2 e3=new Exmp2();
        System.out.println("No. of instances for sv1 : "  + e3.noOfInstances);
        System.out.println("No. of instances for sv2 : "  + e3.noOfInstances);
        System.out.println("No. of instances for sv3 : "  + e3.noOfInstances);
    }
}

我的输出应该是 1 2 2 3 3 3 但我得到 1 1 1 1 1 1 你能给出解决方案吗?

4

9 回答 9

7

将您的noOfInstances变量声明为static.

static int noOfInstances;

由于它不是static,因此为该实例创建了每个new Exmp2()a noOfInstances,默认值为0

于 2013-03-28T06:10:15.397 回答
3

你必须声明noOfInstances为静态的

    static int noOfInstances;

否则每个由创建的新实例new都将有自己的值noOfInstances,再次从 0 开始

于 2013-03-28T06:11:31.740 回答
2

noOfInstances 应该声明为静态的。例如:

static int noOfInstances;

这可能是一个有趣的阅读。它应该有一个与您的情况相似的示例:

静态关键字

简而言之,静态实际上是在给定类的实例之间共享一个变量。如果您有一个不是静态的变量,那么每个实例都会对该变量有自己的私有值。而静态声明的变量在类的所有实例中将具有相同的值。

于 2013-03-28T06:15:09.080 回答
2

变量应该被声明static

为什么?因为目前您的变量noOfInstances不是静态的,并且对于您创建的类的每个实例,也会创建 noOfInstances 变量,并且值始终为 1。因此,在声明它为静态时,它在此类的所有实例之间共享,并且将具有正确的价值。

静态变量是在加载类时创建的,并在所有实例之间共享。

于 2013-03-28T06:15:31.400 回答
2

使noOfInstances 静态如下所示,

static int noOfInstances; // static are shared among all objects created.

无需调用e1.noOfInstances,您可以调用Exmp2.noOfInstances

实例(非静态)变量复制到对象中,而静态变量不复制到对象中。静态是在类级别。每个物体都可以看到它。

于 2013-03-28T06:24:24.247 回答
2

您应该将变量声明int noOfInstances;static,在您的代码中,实例采用默认值 0。

于 2013-04-02T14:22:46.580 回答
2

您必须将变量声明为静态static变量始终存储最近的值,其静态变量将存储在static pool

static int noOfInstances;
于 2013-04-04T09:13:13.217 回答
1

每当您在实例化一个新对象时将其赋值为 0,Make new Exmp2();as以便其范围转移到类级别。noOfInstancesnoOfInstancesstatic

于 2013-03-28T06:16:45.120 回答
1

请参阅以下示例,了解如何将静态变量用于实例计数

package com.stackoverflow.test;

public class Exmp2 {

    static int noOfInstances;

    public Exmp2() {
        noOfInstances++;
    }

    public static void main(String[] args) {
        System.out.println("No. of instances at this point "
                + Exmp2.noOfInstances);
        Exmp2 e1 = new Exmp2();
        System.out.println("No. of instances at this point "
                + Exmp2.noOfInstances);
        Exmp2 e2 = new Exmp2();
        System.out.println("No. of instances at this point "
                + Exmp2.noOfInstances);
        Exmp2 e3 = new Exmp2();
        System.out.println("No. of instances at this point "
                + Exmp2.noOfInstances);
    }
}
于 2013-04-03T09:01:37.570 回答