JVM的几个规范:
允许类加载器在预料某各类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或者存在错误,类加载器必须在程序首次主动使用该类时才报告错误。如果这个类一直没被程序主动使用,类加载器就不会报告错误。
类的实例化是从上到下执行的。
初始化类的时候,类里面的静态代码就必须得执行。
实例代码如下:
执行main方法的时候,要初始化myTest类,然后执行实例化singleton类。执行singleton类的时候,先声明new一个singleton类。所以先执行singleton类的构造函数,得到counter1=1;counter2=1。然后再走下面的赋值的代码,所以最后的执行结果是counter1=1;counter2=0。
但是如果把new singleton的代码放到给counter1和couter2赋值的代码之后,那就根据从上到下的原则,是先赋值,然后再实例化singlton类调用构造函数。所以最后结果就变成了counter1=1;counter2=1;
当Java虚拟机初始化一个类的时候,要求它的所有父类都已经被初始化,但是此规范不适合用于接口。
java.lang.ClassLoader类是一个对象,它是负责加载类。这个类是一个抽象类。它可用于安全管理器的,表示安全域。
ClassLoader类不能实例化,但是我们可以调用ClassLoader类的loadClass方法加载一个类,用它加载的类不是对类的主动使用,不会导致类的初始化。
实例如下:
就学了这么一点,先总结这么一点,后边继续。