Java类别载入器
Java的动态特性两种
1,隐式的:
当程序设计师用到"new"这个关键字的时候,会让类装入器依需求载入相应的类别
2,显示的:
分为两种:
1,继由java.lang.Class里的forName()方法
2,继由java.lang.ClassLoader里的loadClass()方法
隐式的动态特性
在执行java文件时,只有单独的变量声明是不会载入相应的类的,
只有在new生成实例时才会载入
例如:
public class A {
private int id;
private String name;
public int getId() {
return 2;
}
public String getName() {
return "李四";
}
}
类B类A雷同
public class Main {
public static void main(String[] args) {
A a = new A();
B b;
System.out.println(a.getId()+a.getName()+"\n"+b.getId()+b.getName());
}
运行时会报未初始化变量b,JVM只载入了A,而没有载入B
显示的动态特性
java.lang.Class里的forName()方法
类别载入器会依据继承体系最上层的类别往下依序载入,直到所有的祖先类别都载入后,才轮到自己载入
例如:
创建接口Ass
public interface Ass {
public void start();
}
创建类AssClass实现Ass
public class AssClass implements Ass{
@Override
public void start() {
System.out.println("---------");
}
}
public class Main1 {
public static void main(String[] args) throws Exception{
java.lang.Class c = java.lang.Class.forName(args[0]);
Object o = c.newInstance();
Ass a = (Ass) o;
a.start();
}
}