先上代码
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成员