美文网首页
Java反射——动态加载类

Java反射——动态加载类

作者: depers | 来源:发表于2018-05-06 10:55 被阅读15次

    一、静态加载类

    下面通过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反射——动态加载类

          本文链接:https://www.haomeiwen.com/subject/rpnyrftx.html