java 生命周期随笔感想
- 在java的生命周期中,在没有继承关系的情况下,先执行静态变量,再执行静态代码块,再执行静态方法,再执行非静态变量,再执行实例代码块,构造方法,普通方法必须得有对象调用才会被执行,在有继承关系的情况如下:
- 在一个类中的实例代码块中不允许实例化自身类,但是在本类的静态代码块中可以实例化自身的类,只是因为只要本类每new一次,就会先调用自身的实例代码块,如果在实例代码块中new自身的话会造成死循环,而在静态代码块中。因其只被加载一次,不会造成死循环,所以可以在静态代码块中实例化自身
- 例如:public class Test {
- static int i=0;
- {
i++;
}
static {
Student stu=new Student();
Test te5=new Test();//因为静态代码块会只会执行一次,因此不会出现死循环
System.out.println("静态");
}
{
System.out.println("动态");
//Test te8=new Test();在实例代码块中不允许new自身类,会出现死循环,每new一次就会调用实例代码块,所以出现死循环
Test12 tes=new Test12();
Student stu4=new Student();
}
public Test() {
System.out.println("这是构造方法");
}
public static void main(String[] args) {
System.out.println("这是main方法");
Student stu=new Student();
Student stu1=new Student();
//Student1 stu2=new Student1();
Test te=new Test();
Test te1=new Test();
Test te2=new Test();
Test te3=new Test();
System.out.println(i);
System.out.println();
}
}
结果: