MyException - 我的异常网
当前位置:我的异常网» Eclipse » 求教静态初始化块、对象初始化块、构造器执行顺序有

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

www.MyException.Cn  网友分享于:2013-12-27  浏览:18次
求教静态初始化块、对象初始化块、构造器执行顺序问题
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的时候也是各自拿各自的。说到静态块,就像静态变量一样,是所有对象所共享的!

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有