类的初始化过程

类的实例化有两种方法:

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


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值