首先要理解Class类:

在java 的反射中,Class.forName("com.lilin.Office") 使用类的全名,这样获取,不仅仅表示了类的类类型,同时还代表着类的动态加载.

一般,我们编写好的java类,都要经过编译成class文件,然后才能被jvm执行字节码文件,通常我们比较熟悉的就是javac --》编译   java--》运行。

而类的动态加载,就是不需要编译的步骤,直接在运行时的动态加载。

动态加载总用场景:

一般用于功能性的类,方便添加/替换的扩展,类似于QQ的版本升级,OFFICE中的多个功能模块(WORD、EXCEL、PPT)。

下面用一个简单的实例,演示以下 动态加载的好处:

新建一个officeAble的接口类:定义统一的  office 启动接口。

public interface OfficeAble {
/**
* 功能启动
*/
void start();
}

其次,建立好 自己的Word类,实现OfficeAble的接口,模拟测试word的启动操作:

package reflect;

/**
* @author lilin
*
*/
public class Word implements OfficeAble { @Override
public void start() {
System.out.println("启动运行 word程序!");
} }

最后,建立自己的office测试运行类,命令行参数,传入类的全名作参数测试:reflect.Word

package reflect;

/**
* @author lilin
*
*/
public class Office {
public static void main(String[] args) throws Exception {
//动态加载类,在运行时刻加载,传入类的全名
Class c = Class.forName(args[0]);
//newInstance方法获取实例对象,通过强制转换成统一的 officeAble的接口,多态的方案
OfficeAble officeAble = (OfficeAble) c.newInstance();
officeAble.start();
} }

运行结果展示:启动运行 word程序! 完美运行,其实,本测试案例,最好用纯文本编辑代码,自己使用java 命令来编译执行,可以很清楚的指导,哪些是静态加载的类,哪些是动态的,动态加载的类,是不需要编译的,执行在运行时刻加载的。

如果现在,我们需要在增加一个PPT或者是EXCEL的功能,那我们只要仅仅新增加一个实现类,实现我们定义的统一的office接口,就能实时的运行我们新增加的功能类类。

类似于下面这样:运行时刻只要传入 reflect.Excel 的参数,就能实时的启动EXCEL的启动程序。

package reflect;

/**
* @author lilin
*
*/
public class Excel implements OfficeAble { @Override
public void start() {
System.out.println("启动运行 EXCEl程序!");
} }

java reflect 初始学习 动态加载类的更多相关文章

  1. java反射机制与动态加载类

    什么是java反射机制? 1.当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言.我们认为java并不是动态语言,但是它却有一个非常突出的动态相关机制,俗称:反射. IT行业里这么说,没有 ...

  2. [改善Java代码]使用forName动态加载类文件

    动态加载(Dynamic Loading)是指在程序运行时加载需要的类库文件,对Java程序来说,一般情况下,一个类文件在启动时或首次初始化时会被加载到内存中,而反射则可以在运行时再决定是否需要加载一 ...

  3. Java动态加载类

    详见:https://blog.csdn.net/zai_xia/article/details/80026325 扩展:java反射机制与动态加载类 https://www.cnblogs.com/ ...

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

    JAVA中的静态加载类是编译时刻加载类  动态加载类指的是运行时刻加载类 二者有什么区别呢 举一个例子  现在我创建了一个类  实现的功能假设为通过传入的参数调用具体的类和方法 class offic ...

  5. Java动态加载类在功能模块开发中的作用

    Java中我们一般会使用new关键字实例化对象然后调用该对象所属类提供的方法来实现相应的功能,比如我们现在有个主类叫Web类这个类中能实现各种方法,比如用户注册.发送邮件等功能,代码如下: /* * ...

  6. Java运行时动态加载类之ClassLoader

    https://blog.csdn.net/fjssharpsword/article/details/64922083 *************************************** ...

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

    Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编 ...

  8. java反射动态加载类Class.forName();

    1,所有的new出来的对象都是静态加载的,在程序编译的时候就会进行加载.而使用反射机制Class.forName是动态加载的,在运行时刻进行加载. 例子:直接上两个例子 public class Ca ...

  9. 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息

    0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...

随机推荐

  1. DoTween使用

    官网:http://dotween.demigiant.com/ 1.step 这里使用lamda表达式,通过dotween的to方法将其移动到 Vector3(348, 196, 0)的值返回到Ve ...

  2. sublime text编辑器删除已安装的插件

    1.ctr+shift+P,输入package2.查找remove package3.输入你要删除的package4.回车,OK

  3. IOS thread1:exc_bad)access(code=exc_1386_gpflt)错误

    这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象(Zombie Objects)来定位问题: 在Xcode的菜单: Product->Scheme->Edi ...

  4. Java导出数据为EXCEL的两种方式JXL和POI

    JXL和POI导出数据方式的比较 POI支持excel2003和2007,而jxl只支持excel2003. 下面为测试代码: public class TestCondition { /** * 生 ...

  5. NULL值比较,两个列的合并,列值按条件替换。

    show create table 表名 -- 显示创建表的sql语句. 为已有的表增加新列.alter table 表名 add 列名 int NULL -- 此行加了一个int 类型 默认可以nu ...

  6. Android常见包

    Android.jar常见包 android.app-----------提供高层的程序模型.提供基本的运行环境android.content-------包含各种的对设备上的数据进行访问和发布的类a ...

  7. 如何用手机维护Mysql数据库

    如何用手机维护网站数据库 身边很多人都在拿ipad或iphone来玩儿游戏或听歌,大多数人认为它们就是个娱乐设备,在我看来它们同样可以帮助我们更加快捷的工作,我用手机遥控单反.用手机控制PPT的播放. ...

  8. 【spring 6】Spring和Hibernate的整合:编程式事务

    一.编程式事务简介 在 Spring 出现以前,编程式事务管理对基于 POJO 的应用来说是唯一选择.用过 Hibernate 的人都知道,我们需要在代码中显式调用beginTransaction() ...

  9. cordova local notification plugin

    cordova plugin add org.apache.cordova.device cordova plugin add https://github.com/katzer/cordova-pl ...

  10. 转载 《AngularJS》5个实例详解Directive(指令)机制

    <AngularJS>5个实例详解Directive(指令)机制 大漠穷秋 本文整理并扩展了<AngularJS>这本书第六章里面的内容,此书近期即将由电子工业出版社出版,敬请 ...