我想知道为什么每次调用该方法时我的policyNumber都不会增加1。
当我运行它时,我得到了。

我正在尝试让添加的每个策略自动成为PolicyNumber ++。
相反,我得到了相同的数字。而是将相同的值分配给我制定的所有新策略。

run:
Policy #3 with amount $320.0
Policy #3 with amount $500.14
Policy #3 with amount $0.0
false


我以前使用过这种方法,但我不明白为什么它现在不起作用。有人可以给我一些启示。谢谢!

主班

public class Assignment3 {

    public static void main(String[] args) {
        Policy p1 = new Policy(320);
        Policy p2 = new Policy(500.14);
        Policy p3 = new Policy(0);
        System.out.println(p2.policyNumber);
        p1.print(); System.out.println();
        p2.print(); System.out.println();
        p3.print(); System.out.println();
        System.out.println(p1.isExpired());
    }
}


政策类

public class Policy {
    double amount;
    public int policyCount;
    public static int policyNumber;

    public Policy(){
        amount = 0;
        policyCount = 1;
        policyNumber=0;
    }

    public Policy(double a){
        amount = a;
        policyNumber ++;
     }

    public boolean isExpired(){
        return false;
    }

    public void print(){
        System.out.print("Policy #" + this.policyNumber + " with amount $" + this.amount);
        }

}

最佳答案

问题是policyNumber不是静态的。因此,它是一个实例变量,并且对于您实例化的每个对象都有其自己的值。如果要使其成为类变量,则应将其声明为静态:

public static int policyNumber;


检查this official documentation有关类变量和实例变量之间的区别。

此外,您必须将静态计数器分配给实例变量。如果仅使用静态变量,则所有实例都将具有类变量的值。如果要为每个实例分配一个值,则必须将类变量的值复制到一个实例变量。

public class Policy {
   double amount;
   public int policyCount;
   public static int policyNumber = 0;

   private int myPolicyNumber;

   public Policy(double a){
    amount = a;
    myPolicyNumber = policyNumber;
    policyNumber ++;

   //or even better
   //myPolicyNumber = ++policyNumber;

  }
}


然后,您的打印方法应如下所示:

public void print(){
    System.out.print("Policy #" + myPolicyNumber + " with amount $" + this.amount);
}


还应注意,实例变量通常应为私有变量,以遵守信息隐藏原则。

10-07 23:03