Java动态加载类示例详解

 更新时间:2021年02月21日 14:01:28   作者:占位符号  
这篇文章主要给大家介绍了关于Java动态加载类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

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

Office.java

class Office{
	public static void main(String[] args){
		if(args[0].equals("Word")){
			Word w = new Word();
			w.start();
		}
		if(args[0].equals("Excel")){
			Excel e = new Excel();
			e.start();
		}
	}
}

Word.java

class Word{
	public void start(){
		System.out.println("Word Start");
	}
}

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

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

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

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

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

class Office{
	public static void main(String[] args){
		try{
			Class c = Class.forName(args[0]);
			Word w = (Word)c.newInstance();
			w.start();
		}
		catch(Exception e){
			e.printStackTrace();
		}
		
	}
}

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

运行一下:

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

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

OfficeAble.java

interface OfficeAble{
	public void start();
}

Office.java

class Office{
	public static void main(String[] args){
		try{
			Class c = Class.forName(args[0]);
			OfficeAble oa = (OfficeAble)c.newInstance();
			oa.start();
		}
		catch(Exception e){
			e.printStackTrace();
		}
		
	}
}

Word.java

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

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

总结

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

相关文章

  • java long 类型数据的赋值方式

    java long 类型数据的赋值方式

    这篇文章主要介绍了java long 类型数据的赋值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Java加解密工具类源码示例

    Java加解密工具类源码示例

    最近在项目中接触到了数据加解密的业务,数据加密技术是网络中最基本的安全技术,这篇文章主要给大家介绍了关于Java加解密工具类源码的相关资料,需要的朋友可以参考下
    2023-11-11
  • Elasticsearch算分优化方案之rescore_query示例详解

    Elasticsearch算分优化方案之rescore_query示例详解

    这篇文章主要为大家介绍了Elasticsearch算分优化方案之rescore_query示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • springboot中通过lua脚本来获取序列号的方法

    springboot中通过lua脚本来获取序列号的方法

    这篇文章主要介绍了springboot中通过lua脚本来获取序列号的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • java实现json字符串格式化处理的工具类

    java实现json字符串格式化处理的工具类

    这篇文章主要为大家详细介绍了如何使用java实现json字符串格式化处理的工具类,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • 简述Java中进程与线程的关系_动力节点Java学院整理

    简述Java中进程与线程的关系_动力节点Java学院整理

    在 Java 语言中,对进程和线程的封装,分别提供了 Process 和 Thread 相关的一些类。本文首先简单的介绍如何使用这些类来创建进程和线程
    2017-05-05
  • 详解java.lang.NumberFormatException错误及解决办法

    详解java.lang.NumberFormatException错误及解决办法

    这篇文章主要介绍了详解java.lang.NumberFormatException错误及解决办法,本文详解的介绍了错误的解决方法,感兴趣的可以一起来了解一下
    2020-05-05
  • 使用springboot自动配置源码解读

    使用springboot自动配置源码解读

    自动装配是Spring Boot的一个核心特性,允许程序员在开发中更加专注于业务逻辑,而不是花费大量的时间去配置和管理第三方组件,当开发者在pom.xml文件中添加了某个依赖后,Spring Boot通过自动配置的方式,将这些第三方组件的实例自动注入到IOC容器中
    2024-11-11
  • 使用SpringCache操作Redis缓存数据的示例代码

    使用SpringCache操作Redis缓存数据的示例代码

    SpringCache是一个框架,实现了基于注解的缓存功能,只需要简单的加一个注解,就能实现缓存功能,本文给大家介绍了如何使用SpringCache操作Redis缓存数据,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-01-01
  • SpringCloud Feign的使用代码实例

    SpringCloud Feign的使用代码实例

    这篇文章主要介绍了SpringCloud Feign的使用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论