类的实例化有两种方法:
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