类的初始化过程

类的实例化有两种方法:

1. Dog d = new Dog() 自动调用无参构造函数
2.通过反射
Class.forName("com.vo.Dog").newInstance();
此种方法只能调用无参构造函数,假如函数只有带参构造函数,就要使用以下的方式:
Constructor<?> c = class.forName("com.vo.Dog").getConstructor(int.class);
Object newInstance = c.newInstance(2);


实例化的行为:
如果是第一次实例化该类,jvm会首先会执行“类加载”:检查该类的父类是否“注册”,否则进行“类加载”生成
父类的Class对象并执行静态代码(包括静态变量初始化以及静态块)。然后对该类“执行注册”。注册完毕后
进行实例化过程,jvm在堆中开辟一个合适大小的空间,生成实例。最后执行初始化过程,同样按照先父类再
子类的顺序执行构造函数。
示例:
public class Dog extends Animal{
      static{
            System.out.println("Dog-i'm static blog");
      }
      public Dog(){
            System.out.println("Dog-initialize");
      }
}
public class Animal {
      static{
            System.out.println("Animal-i'm static blog");
      }
      public Animal(){
            System.out.println("Animal-initialize");
      }
}
 
TEST: 执行 Dog = new Dog()
output:
Animal-i'm static blog
Dog-i'm static blog
Animal-initialize
Dog-initialize


 

你可能感兴趣的:(java基础)