<b>JAVA程序的类加载及其反射机制</b>[Java编程]
本文“<b>JAVA程序的类加载及其反射机制</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
JAVA中类文件加载是动态的.JVM指令是被封装在了. class文件里面,而.class文件的加载历程是动态的,也就是说当我们用到的时刻才会去加载,假如不用的话,就不会去加载我们的类.这里所说的用到包含两种方法,第一种就是new一个对象的时刻(这个时刻要分外注意,当计划到多态的时刻,就会有一点点改变,这时刻编译器会做一些优化,这样以来当加载的时刻会提早加载计划到多态的类,关于这一点下面有个例子(example 1)来阐明.另一种就是当一个类的静态代码被调用的时刻.
java 代码
//example 1
// Zoo.java
abstract class Animal {
Animal(){
System.out.println("Animal constructor");
}
}
class Tiger extends Animal {
Tiger(){
System.out.println("Tig constructor ");
}
}
class Dog extends Animal {
Dog(){
System.out.println("Dog Constructor ");
}
}
public class Zoo {
private Animal am; //Example 1.1
//private Dog am; Example 1.2
private Tiger tiger;
Zoo(){
tiger = new Tiger();
am = new Dog();
}
public static void main(String [] args){
System.out.println("new Zoo before");
Zoo z = new Zoo();
System.out.println("new Zoo after ");
}
}
当我们注释掉Example.1.1行时,运行Example1.2行,后果以下:
Example 1.2
解析以上两图的运行后果我们可以看出:当我们将子类对象赋值给父类时,编译器会做一点优化,于是加载器在还没有new 子类对象的时刻已经加载了父类以及子类(example1.1后果),当不存在多态的时刻,我们可以看到是当要new Dog()的时刻才会加载Dog以及父类.无论何种方法,在new之前,类确切已经加载到了内存中.
JAVA为我们供应了两种动态机制.第一种是隐式机制.其实new一个对象和调用类的静态办法时,就是隐式机制在工作.第二种是显示机制.显示的机制又有两种战略(第一种是用java.lang.Class的forName(String str)办法,第二种是用java.lang.ClassLoader的loadClass()).
第一种:操纵forName办法
当我们查API文档就会发现forName办法有两种情势.辨别以下:
public static Class<?> forName(String className)
throws ClassNotFoundException
public static Class<?> forName(String name,
boolean initialize,
ClassLoader loader)
throws ClassNotFoundException
以上是“<b>JAVA程序的类加载及其反射机制</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |