Class.forName()+Class.forName().newlnstance()和new语句和初始化块+static初始化块+构造方法之间的关系...

本文通过一个示例代码展示了Java中类的加载过程及对象初始化的顺序,包括静态初始化块和非静态初始化块的执行时机,并解释了Class的newInstance()方法与new关键字的区别。

先上代码

class A{
    int a;
    static {System.out.println("载入类时执行");}
    public A() {
        System.out.println("我虽然写在初始化块前但是实际先执行初始化块里的内容再执行我");
        
    }
    {System.out.println("先执行我!");}
}
public class Html {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
        Class O=Class.forName("A");
        Class P=Class.forName("A");
        O.newInstance();
        A i=new A();
        A o=new A();
    }
}

 

代码执行结果是

载入类时执行

先执行我!

我虽然写在初始化块前但是实际先执行初始化块里的内容再执行我

先执行我!

我虽然写在初始化块前但是实际先执行初始化块里的内容再执行我

先执行我!

我虽然写在初始化块前但是实际先执行初始化块里的内容再执行我

参考文章

http://www.cnblogs.com/xingzc/p/5760166.html

http://www.cnblogs.com/wangxin37/p/6397742.html

 

newlnstance()是一个方法

new是一个关键字

Class下的newlnstance()的使用有局限他只能调用无参的构造函数

new关键字生成对象(类的实例)没有这个限制

Class..forName()返回的是一个类

Class.forName().newlnstance()返回的是Object(类的实例)

 

 

初始化块

和构造方法一样用于初始化对象(赋值);

一个初始化块是在类中由一段花括号括起来的

它的作用就是想是把他放在类中每个构造方法最开始的位置

Static初始化块

和构造块的区别是声明中带有STATIC外,其它和初始化块一样。当类加载时执行,只能引用static成员

 

转载于:https://www.cnblogs.com/lishihai/p/7751227.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值