美文网首页
Java 反射理解(二)-- 动态加载类

Java 反射理解(二)-- 动态加载类

作者: 希希里之海 | 来源:发表于2019-07-21 11:51 被阅读0次

Java 反射理解(二)-- 动态加载类

概念

在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点:

  • 不仅表示了类的类类型,还代表了动态加载类
  • 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类

演示

我们以具体的代码来演示什么是动态加载类和静态加载类:

  • 新建:Office.java
class Office
{
    public static void main(String[] args) {
        
        // new 创建对象,是静态加载类,在编译时刻就需要加载所有的可能使用到的类
        // 通过动态加载类可以解决该问题
        if ("word".equals(args[0])) {
            Word w = new Word();
            w.start();
        }
        if("Excel".equals(args[0])) {
            Excel e = new Excel();
            e.start();
        }
    }
}

如果运行该程序,会报错,因为 new 创建对象,是静态加载类,在编译时刻就需要加载所有的可能使用到的类,但我们并没有 Word 和 Excel 类。

我们通过 Class.forName("具体包名") 来动态加载类。

  • 新建 OfficeBetter.java
class OfficeBetter {
    public static void main(String[] args) {
        try {
            // 动态加载类,在运行时刻加载
            // args 是使用命令行的参数列表 形如:  java  指定的程序名 参数 
            // args[0]即参数列表的第一个参数
            Class c = Class.forName(args[0]);
            //通过类类型,创建该类对象
            OfficeAble oa = (OfficeAble) c.newInstance();
            oa.start();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行 javac 后我们发现程序并没有报错,因为该类动态加载 OfficeAble ,编译过程不加载,只在运行时刻加载。

  • 我们新建 OfficeAble.javaWord.javaExcel.java

OfficeAble.java

interface OfficeAble {
    public void start();
}

Word.java :

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

Excel.java

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

执行:

java OfficeBetter Word

可以看到便顺利打印出:word...start...

此时 OfficeBetter.java 是并没有重新编译过的,这就说明了 Word 类是动态加载的。

同理,执行:

java OfficeBetter Excel

打印出:excel...start...,Excel 类是动态加载的。


完。

相关文章

  • Java 反射理解(二)-- 动态加载类

    Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全...

  • Java反射

    一. Class类 二. Java动态加载类 三. Java获取方法信息 四. Java方法反射的基本操作

  • JAVA-Reflect

    一、Class类的使用 二、Java动态加载类 三、Java获取方法信息 四、Java方法的反射

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • Java基础再回顾-Java反射

    静态加载和动态加载 为了更好地了解Java反射,我们先来理解一下Java的静态加载和动态加载。 静态加载 静态加载...

  • java基础3

    1、说说对Class类的理解 2、说说Class/Java动态加载类 3、通过反射获取类的方法、变量等 4、方法的...

  • 2018-08-30

    Java反射 类的反射方法: new 创建对象 是静态加载类,在编译时刻就需要加载所有的可能使用到的类。 通过动态...

  • Java基础:类加载器

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 什么是类加...

  • java 反射

    java反射主要从以下几个方面理解 理解 Class 类 理解 Java 的类加载机制 学会使用 ClassLoa...

  • 知识总结之 插件化基础 java反射与代理

    Java平台的反射机制是代码动态加载和调用的基本途径,在安卓系统源码中也用到了大量的反射动态加载类。反射也是安卓平...

网友评论

      本文标题:Java 反射理解(二)-- 动态加载类

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