从语法角度上来说,程序可以在三个地方对实例变量进行初始化
--定义实力变量时指定初始化值。
--非静态初始化快对实例变量初始化。
--构造器中对实例变量进行初始化。
其中第一个第二个要在第三个之前执行,一二两个的执行顺序与他们在源代码中的排列顺序相同。
class Cat{
String name;
int age;
//使用构造器初始化实例变量
public Cat(String name, int age) {
super();
System.out.println("执行构造器");
this.name = name;
this.age = age;
}
//定义时指定的值
double weight=2.3;
{
System.out.println("执行非静态初始化快");
weight=210.1;
}
@Override
public String toString() {
return "Cat [name=" + name + ", age=" + age + ", weight=" + weight + "]";
}
}
public class BianliangDemo{
public static void main(String[] args) {
Cat c=new Cat("lishuai",18);
System.out.println(c);
Cat c2=new Cat("lishui",8);
System.out.println(c2);
}
}
每当程序调用指定的构造器来创建java对象时,该构造器必然会获得先执行的机会,除此之外,该类所包含的非静态初始化块将会获得执行机会,而且总是在构造器执行之前获得执行。
class Person{
int count =20;
{
count=23;
}
public Person(){
System.out.println(count);
}
}
public class BianDemo {
public static void main(String[] args) {
Person p=new Person();
}
}
count=23;这条语句会被提取到java类的构造器中执行。
网友评论