服务器之家

服务器之家 > 正文

Java动态加载类示例详解

时间:2021-08-11 12:07     来源/作者:占位符号

在讲解动态加载类之前呢,我们先弄清楚为什么要动态加载类,静态加载不行吗?我们可以看下面的实例:

我在文件夹里写了Office.java 类和 Word.java类,如下:

Java动态加载类示例详解

Office.java

  1. class Office{
  2. public static void main(String[] args){
  3. if(args[0].equals("Word")){
  4. Word w = new Word();
  5. w.start();
  6. }
  7. if(args[0].equals("Excel")){
  8. Excel e = new Excel();
  9. e.start();
  10. }
  11. }
  12. }

Word.java

  1. class Word{
  2. public void start(){
  3. System.out.println("Word Start");
  4. }
  5. }

此时我们编译一下Office.java 文件:

Java动态加载类示例详解

编译会报错,这当然没问题,因为确实没有写Excel.java类。

但是这个Excel类我们一定会用到吗?如果这个Excel类需要很久才能写出来,在此我们也不能使用其他功能吗?后面如果一个类出问题了,这个系统是不是就瘫痪了?

所以这就体现出动态加载类的好处了,动态加载类是按需加载的,你需要什么类,就加载什么类,一个类的状态,不会影响到另一个类的使用。

所以我们可以将Office类改造如下:

  1. class Office{
  2. public static void main(String[] args){
  3. try{
  4. Class c = Class.forName(args[0]);
  5. Word w = (Word)c.newInstance();
  6. w.start();
  7. }
  8. catch(Exception e){
  9. e.printStackTrace();
  10. }
  11.  
  12. }
  13. }

虽然我们还是没有写Excel类,但此时我们再编译Office.java文件,编译通过;

Java动态加载类示例详解

运行一下:

Java动态加载类示例详解

成功按照我们预想的结果运行,这样Word类就可以单独运行。

但是这样还是不够规范,因为现在只能加载Word类类型的类文件,为了使程序有更好的扩展性,我们添加一个接口,只有让所有的功能类实现该接口即可。完善如下:

OfficeAble.java

  1. interface OfficeAble{
  2. public void start();
  3. }

Office.java

  1. class Office{
  2. public static void main(String[] args){
  3. try{
  4. Class c = Class.forName(args[0]);
  5. OfficeAble oa = (OfficeAble)c.newInstance();
  6. oa.start();
  7. }
  8. catch(Exception e){
  9. e.printStackTrace();
  10. }
  11.  
  12. }
  13. }

Word.java

  1. class Word implements OfficeAble{
  2. public void start(){
  3. System.out.println("Word Start");
  4. }
  5. }

这样改造之后,我后面要添加一个Excel类,乃至添加其他的类,只需要实现OfficeAble接口就可以了,不需要改动Office这个类和其他的功能类,扩展性很强,这就是动态加载的优势。

总结

到此这篇关于Java动态加载类的文章就介绍到这了,更多相关Java动态加载类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

原文链接:https://blog.csdn.net/zai_xia/article/details/80026325

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部