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