java反射:动态加载类
来源:互联网 发布:php实现api接口 编辑:程序博客网 时间:2024/05/14 05:20
我们在编程时也许会遇到这样的问题,当我们在定义两个类对象时,如果其中一个类不存在,或者类的方法找不到,那么即使另外一个类以及其类方法是存在并且正确的,我们在运行时也会报错,如以下这个问题:
if("Word".equals(args[0])) { Word word=new Word(); word.start(); } if("Excel".equals(args[0])) { Excel excel=new Excel(); excel.start(); }
运行结果显示,Word和Excel类不存在,并且start()方法找不到,这时我们进行如下操作:
class Word{public void start() { System.out.println("Word Start");}}
创建Word类和Word类中的start()方法之后,再次运行该程序,此时仍然会报出两个错误:Excel类以及Excel类中的start()方法不存在
这是因为用new创建对象,是静态加载类,在编译时刻就要加载所有可能存在的类
但如果我们只用Word类,不使用Excel类,这种静态加载类就不能满足我们的要求。假设如果有一百个类,而只有一个类不能通过编译,则其他所有的类都不能使用,这不是我们所希望看到的。
这要求类在运行时动态加载,需要用到哪个类,就加载哪个类,其他类的情况不会影响到这个类
class dynamicBetter{ public static void main(String args[]) throws ClassNotFoundException, InstantiationException, IllegalAccessException { Class c=Class.forName(args[0]); Word w=(Word)c.newInstance();//通过类类型创建该类的对象}
如上,我们通过该类的类类型来创建某一个类的对象,此时实现了动态加载类,在编译过程中不会报出任何错误
此时我们在动态加载Word时可以得到运行结果,那么如果动态加载的是Excel类呢?为了保证统一性,可以进行如下操作:
public static void main(String args[]) throws ClassNotFoundException, InstantiationException, IllegalAccessException { Class c=Class.forName(args[0]); //Word w=(Word)c.newInstance();//通过类类型创建该类的对象,要想让Word和Excel都可以用,要进行统一 OfficeAble oa=(OfficeAble)c.newInstance(); oa.start(); } interface OfficeAble{ public void start();}class Word implements OfficeAble{//实现统一接口public void start() { System.out.println("Word Start");}}
通过一个统一的接口,使得动态加载类时更为灵活,扩展功能时只要添加相应功能的类实现统一的接口即可
功能性的类尽可能进行动态加载
阅读全文
0 0
- java反射:动态加载类
- Java利用反射动态加载类实战
- 动态加载类(JAVA反射机制)
- Java反射——动态加载类
- java反射之动态加载类
- Java反射(二)----- 动态加载类
- Java反射第二课 动态加载类
- Java反射第二课 动态加载类
- JAVA反射之动态加载类
- Java反射机制-动态加载类
- java动态编译,反射加载类
- Java--反射(二) Java动态加载类
- 黑马程序员——【Java反射学习】动态加载类
- java反射学习笔记之 动态加载类
- Java——反射(1.动态加载类)
- java类加载,反射,动态代理入门理解
- 20、Java入门—反射之动态加载类
- Java基础(反射,类加载,动态代理)
- K
- dubbo配置方式
- redis(4)——redia数据库
- 迁移学习
- const在C和C++中的区别
- java反射:动态加载类
- Sublime Text 2中的快捷键
- 009day(break,continue语句的学习,OJ输入数据的处理)
- 进程间通讯-有名管道
- HTTP会话解释原理及应用
- Spring Boot + Mybatis + Redis二级缓存
- SpringMVC 国际化-中英文切换
- Java中范型通配符
- Leap Motion环境配置(C++)