Java反射——动态加载类

一、静态加载类

下面通过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类。

你可能感兴趣的:(Java反射——动态加载类)