站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题静态字段的一个问题,请大家帮我分析个源码

静态字段的一个问题,请大家帮我分析个源码

摘要: 静态字段的一个问题,请大家帮我分析个源码


最近在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(-#34;Harry-#34;, 40000);
staff[1] = new Employee(60000);
staff[2] = new Employee();

// print out information about all Employee objects
for (int i = 0; i -#60; staff.length; i++)
{
Employee e = staff[i];
System.out.println(-#34;name=-#34; + e.getName()
+ -#34;,id=-#34; + e.getId()
+ -#34;,salary=-#34; + 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(-#34;Employee #-#34; + nextId, s); //为何nextId不能换成id//
}

// the default constructor
public Employee()
{
// name initialized to -#34;-#34;--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 = -#34;-#34;; // instance variable initialization
private double salary;
}


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


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


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


静态的字段可以在不用初始化的情况下使用,而非静态的就必须先初始化类,生成类的实例才能使用



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


↑返回目录
前一篇: 为何在applet里init()方法处不能给控钮获取焦点
后一篇: 一个想不通的问题????