专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Eclipse

求教静态初始化块、对象初始化块、构造器执行顺序有关问题

发布时间:2010-06-05 15:36:39 文章来源:www.iduyao.cn 采编人员:星星草
求教静态初始化块、对象初始化块、构造器执行顺序问题
package kevin.study.CT;


public class ConstructorTest
{
public static void main(String[] args)
{

Employee[] staff=new Employee[3];
staff[0]=new Employee("Harry",4000);
System.out.println("Next availble Id is:"+Employee.getnextId()); staff[1]=new Employee(5000);
staff[2]=new Employee();
 
 

for(Employee e:staff)
System.out.println("id:"+e.getId()+ ",name:"+e.getname()+ ",salary:"+e.getsalary());

}

}

import java.util.*;

class Employee 
{
public Employee(String n, double s)
  {
name=n;
salary=s;
  }
   
public Employee(double s)
{
this("Employee #"+nextId,s);
}
   
public Employee()
{

}

public String getname()
{
return name;
}

public double getsalary()
{
return salary;
}

public int getId()
{
return id;
}

public static int getnextId()
{
return nextId;
}

private String name="Hellen";
private double salary=6000;
private int id;
private static int nextId;

static
{
Random generator=new Random();
nextId=generator.nextInt(10000);
}

{
id=nextId;
nextId++;

}

}

今天看书看到有关初始化块的内容,然后根据书上的一个例子操作了一下。上面代码中红色的部分是想验证nextId的值在不同地方各是多少?结果发现nextId在生成随机数字后,把他放在STAFF这3个数组的不同地方,在控制台上输出的值也是不同的。虽然和我设想的一样,但是想不通的是nextId在系统内是如何变化(就是程序的执行顺序)的?他在什么时候会自加1,然后输出呢?
  求各位高人指教!!!

------解决方案--------------------
非静态块在new对象的时候执行 你在非静态块里面加个输出看下就明白
------解决方案--------------------
每个对象在new的时候都会分配一块内存地址的~~所以每个对象都会有一个id互相没有关系的。你get的时候也是各自拿各自的。说到静态块,就像静态变量一样,是所有对象所共享的!
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: