最近在corejava书上看到这样一个代码,为什么此处nextID不能换成id (已标示)import java.util.*;public class ConstructorTest
{
   public static void main(String[] args)
   {
      // fill the staff array with three Employee objects
      Employee[] staff = new Employee[3];      staff[0] = new Employee("Harry", 40000);
      staff[1] = new Employee(60000);
      staff[2] = new Employee();      // print out information about all Employee objects
      for (int i = 0; i < staff.length; i++)
      {
         Employee e = staff[i];
         System.out.println("name=" + e.getName()
            + ",id=" + e.getId()
            + ",salary=" + e.getSalary());
      }
   }
}class Employee
{
   // three overloaded constructors
   public Employee(String n, double s)
   {
      name = n;
      salary = s;
   }   public Employee(double s)
   {
      // calls the Employee(String, double) constructor
      this("Employee #" + nextId, s);                       //为何nextId不能换成id//
   }   // the default constructor
   public Employee()
   {
      // name initialized to ""--see below
      // salary not explicitly set--initialized to 0
      // id initialized in initialization block
   }   public String getName()
   {
      return name;
   }   public double getSalary()
   {
      return salary;
   }   public int getId()
   {
      return id;
   }   private int id;
   private static int nextId;   // object initialization block
   {
      id = nextId;
      nextId++;
   }   // static initialization block
   static
   {
      Random generator = new Random();
      // set nextId to a random number between 0 and 9999
      nextId = generator.nextInt(10000);
   }   private String name = ""; // instance variable initialization
   private double salary;
}

解决方案 »

  1.   

    调用本类的构造器的时候,不能使用本类的非静态field,也就是说不能在一个类被实例化之前使用类的非静态字段。
      

  2.   

    我看了哈。代码不全。不过我可以说一哈静态方法与一般方法的区别,静态方法是类的方法。它可以由类来引用或者用对象来引用 ,不过其他的方法即对象的方法只能由对象引用。当然就不能让类来引用。你可以看到main()方法就是这个样子。他属于类的方法。它使用的时候就不是用对象,因为它属于类。既有static修饰符。它本身就是一个主线程,故它的引用是有系统自行执行的 ,估计问题就在这里。另外他们还有很多区别。比如。装载时期不同 啊等等!你可以去看哈有关书籍。
      

  3.   

    对了。加一点this就是代表类对象的表识符。
      

  4.   

    主要是理解private ,static这两个关键字。