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

先上代码

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成员

 

posted @ 2017-10-29 21:04  专注2017  阅读(663)  评论(0编辑  收藏  举报