public class TestOrder {
public static void main(String[] args) {
Order order = new Order();
System.out.println(order);
System.out.println();
System.out.println("*********************");
System.out.println();
Order order1 = new Order();
System.out.println(order1);
System.out.println();
System.out.println("*********************");
System.out.println();
System.out.println("输出上面两个order对象之后发现,输出一模一样【不加上静态代码块的时候】,可证明:每创建一个类的对象,非静态初始化就加载一次");
System.out.println("为了更好的证明,最好把构造器中的赋值去掉,只使用初始化块来赋值。打印的两个order对象依旧一样。");
System.out.println("加上静态代码块之后,发现,输出的两个order对象不一样,只有第一个对象有静态代码块输出的内容,证明静态代码块只被加载一次");
}
}
class Order {
private String name;
private int age;
private static String nameOrder;
public Order() {
super();
name = "王五";
age = 16;
System.out.println("这是无参构造器,new一个对象时候,最后一步执行,执行完构造器,对象就new出来了");
}
public Order(String name, int age) {
super();
this.name = name;
this.age = age;
System.out.println("这是有参构造器,new一个对象时候,最后一步执行,执行完构造器,对象就new出来了");
}
static {
System.out.println("这里是静态代码块2");
nameOrder = "麻子";
}
{
name = "张三";
age = 14;
System.out.println("这是第一个初始化块,第一步执行");
}
{
name = "李四";
age = 15;
System.out.println("这是第二个初始化块,第二步执行");
}
static {
System.out.println("这里是静态代码块1");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Order [name=" + name + ", age=" + age + "]";
}
}
这里是静态代码块2
这里是静态代码块1
这是第一个初始化块,第一步执行
这是第二个初始化块,第二步执行
这是无参构造器,new一个对象时候,最后一步执行,执行完构造器,对象就new出来了
Order [name=王五, age=16]
*********************
这是第一个初始化块,第一步执行
这是第二个初始化块,第二步执行
这是无参构造器,new一个对象时候,最后一步执行,执行完构造器,对象就new出来了
Order [name=王五, age=16]
*********************
输出上面两个order对象之后发现,输出一模一样【不加上静态代码块的时候】,可证明:每创建一个类的对象,非静态初始化就加载一次
为了更好的证明,最好把构造器中的赋值去掉,只使用初始化块来赋值。打印的两个order对象依旧一样。
加上静态代码块之后,发现,输出的两个order对象不一样,只有第一个对象有静态代码块输出的内容,证明静态代码块只被加载一次