Class.forName(“类的全称”)
Class.forName(“类的全称”)不仅仅代表类的类类型 还代表了动态加载类
动态加载和静态加载
编译时刻加载类是静态加载类、运行时刻加载类是动态加载类 注意:区分编译 运行的区别
静态加载
new 类的实例对象 是编译时刻的静态加载类
运行时刻
public class Office {
public static void main(String[] args) {
if(("Word").equals(args[0])){
Word w=new Word();
w.start();
}
if(("Excel").equals(args[0])){
Excel w=new Excel();
w.start();
}
}
}
编译的时候,类找不到,方法找不到 ,编译不通过
Word 不一定用 ,Excel不一定用
存在word ,但还是用不了,因为我们类是做静态加载 编译时刻就需要加载所有可能使用到的类 但是其中有一个不存在或者错误 就无法编译通过
动态加载类 (不能因为一个影响所有)
如果我们需要存在一个功能就用一个功能呢 ?而不是一个功能有问题,其他功能就无法使用?
所以我们需要动态加载类,在运动时加载,
动态加载类的方法
Class.forName(“类的全名”)
使用原则: 功能性的类使用动态加载
使用技巧
相同的功能 使用接口去指定标准,比如PPT ,EXCEL ,Word
package com.javatest;
public interface Officeable {
public void start();
}
package com.javatest;
public class Word implements Officeable{
@Override
public void start() {
System.out.println("Excel ");
}
}
package com.javatest;
public class Office {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
String str="Excel";
if(("Word").equals(str)){
Word w=new Word();
w.start();
}
if(("Excel").equals(str)){
Class c1= Class.forName("com.javatest.Excel");
Officeable e=(Officeable)c1.newInstance();
}
}
}