Java--Reflect(反射)专题2——动态加载类

转载请注明:http://blog.csdn.net/uniquewonderq

首先区分什么是动态加载,什么是静态加载?

Class.forName("类的全称");//第三种表达类类型的方式

不仅代表了类的类类型,还代表了动态加载类

要区分编译和运行。

编译时刻加载类是静态加载类。运行时刻加载类是动态加载类。

在编译时刻就需要加载所有的可能使用到的类。

演示代码如下:功能性的类,最好使用动态加载。如,更新,升级,增加新功能等。

首先是一个接口,用于动态加载的。稍候可体验出来。

package com.test;

interface OfficeAble {
    public void start();
}

其次,定义一个word和excel分别实现这个接口

package com.test;

 class word implements OfficeAble{
     @Override
     public void start(){
         System.out.println("word..start");
     }
}
package com.test;

/**
 *
 * @author wonderq
 */
public class Excel implements OfficeAble{
     @Override
     public void start(){
         System.out.println("word..start");
     }
}

下面是测试的officeBetter类

package com.test;
public class OfficeBetter {
    public static void main(String[] args) {
         String className="com.test.word";
         System.out.println("className="+className);
        try {
            //动态加载类,在运行时刻,编译时刻不报错
            Class c=Class.forName(className);
            //通过类类型,创建该类的类型
            OfficeAble oa=(OfficeAble)c.newInstance();//父类变量oa指向子类对象
            oa.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这样子就可以不用编译的静态加载类,而是在每次运行这个类的时候动态加载类。减小了系统的开销。当然,这个程序可以在写一个方法,然后参数写类的名字即可,就可以封装为一个独立的模块。

运行此类的结果:

run:

className=com.test.word

word..start

时间: 2024-10-13 12:06:04

Java--Reflect(反射)专题2——动态加载类的相关文章

java 反射机制与动态加载类学习要点

获取Class类的对象: 假设Foo是一个类,Foo foo = new Foo():则 第一种:Class c1 = Foo.class; 第二种:Class c2 = foo.getClass(); 第三种:Class c3 = Class.forName("com.nudt.reflection.Foo"); //会抛出异常 此时  c1 == c2 == c3 为true 也可以通过c1\c2\c3创建Foo的实例: Foo foo = (Foo)c1.newInstance(

Java反射第二课 动态加载类

在第一节课中我们讲的第三种方法 Class.forName("类的全称"); 不仅表示了类的类类型,还代表了动态加载类 请大家区分编译,运行 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 现在的开发工具比如eclipse把编译过程给隐藏了 下面做一个实验 比如用记事本编写下面的Office.java文件 class Office { public static void main(String[] args) { if(("Word").equals(ar

Java 从Jar文件中动态加载类

由于开发的需要,需要根据配置动态加载类,所以简单测试了一下JAVA动态加载类 定义接口 package loader; public interface HelloIface {     public String hello();          public String sayHi(); } 实现接口 在其他插件类实现此接口,并导出为jar,如D:/tmp/test.jar package loader; public class HelloImpl implements HelloIf

Java动态加载类

详见:https://blog.csdn.net/zai_xia/article/details/80026325 扩展:java反射机制与动态加载类 https://www.cnblogs.com/wzk-0000/p/9322866.html 在讲解动态加载类之前呢,我们先弄清楚为什么要动态加载类,静态加载不行吗?我们可以看下面的实例: 我在文件夹里写了Office.java 类和 Word.java类,如下: Office.java class Office{ public static

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

Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 演示 我们以具体的代码来演示什么是动态加载类和静态加载类: 新建:Office.java: class Office { public static void main(String[] args) { // new 创建对象,是静态加载类,在编译时刻就需

[javaSE] 反射-动态加载类

Class.forName(“类的全称”) ①不仅表示了类的类类型,还代表了动态加载类 ②请大家区分编译,运行 ③编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 Ⅰ所有的new对象都是静态加载类 在编译的时刻就要去检测该类是否存在,如果不存在,编译失败. //对于这种情况,静态加载不适用,因为我们需要根据输入来确定加载哪个类 package com.tsh.reflect; class ReflectLoadDemo { public static void main(String[]

java动态加载类和静态加载类笔记

JAVA中的静态加载类是编译时刻加载类  动态加载类指的是运行时刻加载类 二者有什么区别呢 举一个例子  现在我创建了一个类  实现的功能假设为通过传入的参数调用具体的类和方法 class office { public static void main(String args[]) { if("word".equals(args[0]) { word w=new word(); word.run(); } if("excel".equals(args[0]) {

Java运行时动态加载类之ClassLoader

https://blog.csdn.net/fjssharpsword/article/details/64922083 *************************************************************************** 需求场景:动态加载类ClassLoaderd,在xml文件中配置加载类名称和方法,: 一.准备 1)在D:\\tmp\\目录下配置a.xml文件: <?xml version="1.0" encoding=&q

动态加载类的用法

1.动态加载类实现 首先要创建一个Word类的类类型,在通过类类型创建一个满足OfficeAble(标准)的一个对象s,通过对象s就可以调用Word类中的方法. import T1.OfficeAble; public class Office1 { public static void main(String[] args) { try { Class c= Class.forName("T1.Word"); //传入什么类就 加载什么类 //创建对象 OfficeAble s=(O