我是靠谱客的博主 鲤鱼绿草,最近开发中收集的这篇文章主要介绍Java反射(二)----- 动态加载类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在java中,Class.forName(“类的全名”)不仅代表了类的类类型,还代表了动态加载类

注:编译时刻加载啊类是静态加载类、运行时刻加载类是动态加载类
现在我们通过一个简单地例子来理解静态加载和动态加载。

  1. 新建一个文件夹,命名随意,我命名为reflect,用文本编辑器(记事本或其他,我使用sublime)在其中创建一个java文件,文件中写入如下代码
class Office{
    public static void main(String[] args){
        //此处args[0]为命令行参数
        if ("Word" . equals(args[0])) {
            Word w = new Word();
            w.start();
        }
        if ("Excel" . equals(args[0])) {
            Excel e = new Excel();
            e.start();
        }
    }
}

这里写图片描述

在此文件夹打开命令行,输入javac Office.java,结果如下图

这里写图片描述

显然,由于没有写Word类和Excel类,所以报错了。


  1. 接着在同一目录下,分别新建Word.java文件,代码如下

Word.java文件
class Word{
    public static void start(){
        System.out.println("Word");
    }
}

然后我们在命令行先编译Word类,再编译Office,发现错误变少了,如下图
这里写图片描述
由于Excel类不存在,那Office.java编译就会出错,即使Word.java已经存在,但由于Excel的原因,Office.java无法使用
注:new对象是静态加载类,在加载时刻就需要加载所有可能使用到的类,这便是运行时加载
3. 在同一目录下新建 OfficeBetter.java文件,代码如下

class OfficeBetter{
    public static void main(String[] args){
        try{
            Class c = Class.forName(args[0]);
        }catch(Exception e){
            e.printStackTrace();
        }

    }
}

在这个文件中我们使用Class.forName()实现动态加载类,在运行时刻加载,所以现在通过命令行编译OfficeBetter.java进行编译,即使Excel类不存在,也不会报错,同时,我们运行OfficeBetter并传入参数Excel,这时候由于不存在Excel类才会出现ClassNotFoundException 如下图
这里写图片描述
4. 现在我们要使用 c 来创建 该类的对象,并调用它的方法,同时为了可以同时兼顾到可以创建Word和Excel的对象,我们使用一个接口OfficeAble来实现。

OfficeAble.java文件

Interface OfficeAble{
    public void start();
}

OfficeBetter.java文件

class OfficeBetter implements OfficeAble{
    public static void main(String[] args){
        try{
            //动态加载类,在运行时刻加载
            Class c = Class.forName(args[0]);
            //通过类类型,创建该类的对象
            OfficeAble oa = (OfficeAble)c.newInstance();
            oa.start();
        }catch(Exception e){
            e.printStackTrace();
        }

    }
}

现在我们就可以编译运行OfficeWord.java文件了,同时我们也可以创建Excel.java文件,让其动态加载Excel.java文件和Word.java文件

Word.java

class Word implements OfficeAble{
    public static void start(){
        System.out.println("Excel");
    }
}

Excel.java

class Excel implements OfficeAble{
    public static void start(){
        System.out.println("Excel");
    }
}

现在我们在命令行动态加载Word和Excel,如下图
这里写图片描述
看图中我们已经可以动态加载类了,通过动态加载,选择性运行Word和Excel类。

最后

以上就是鲤鱼绿草为你收集整理的Java反射(二)----- 动态加载类的全部内容,希望文章能够帮你解决Java反射(二)----- 动态加载类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部