Java反射——动态加载类
2018-05-06 本文已影响15人
depers
一、静态加载类
下面通过new关键词直接创建的对象就是静态加载类,在编译时刻就需要加载所有的可能使用的类。
class Office{
public static void main(String[] args){
// new创建的对象 是静态加载类,在编译时刻就需要加载所有的可能使用的类。
if ("Word".equals(args[0])) {
Word word = new Word;
word.start();
}
if ("Excel".equals(args[0])) {
Excel excel = new Excel();
excel.start();
}
}
}
我们通过javac来编译一下,这时就会报错。说Word和Excel对象找不到。
二、动态加载类
下面通过forname函数得到的这个类,只会在运行时才加载。
class OfficeBetter{
public static void main(String[] args) {
try{
// 动态加载类,在运行时刻加载
Class c = Class.forName(args[0]);
// 通过类类型,创建该类对象
OfficeAble o = (OfficeAble)c.newInstance();
o.start();
}
catch(Exception e){
e.printStackTrace();
}
}
}
为了实现演示效果,这里我们有编写了一个接口OfficeAble 。
public interface OfficeAble{
void start();
}
此时,我们分别编译OfficeBetter.java是不会报错的。然后我们编写实现OfficeAble接口的Word类。
public class Word implements OfficeAble{
public void start(){
System.out.println("word...start");
}
}
然后编译Word.java文件。
此时我们在控制台输入:
14_20170923173043_834.png运行时才会加载Word类。