iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >一个简单的类加载器URLClassLoader案例
  • 690
分享到

一个简单的类加载器URLClassLoader案例

java类加载器javaURLClassLoaderjava类加载器案例 2023-05-14 12:05:29 690人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

类加载器之URLClassLoader的简单demo 最近,看了一点反射相关的知识,感觉Java 的知识还有很多需要学习的,这也是一个很大的挑战吧。这里写了一个小 demo,来加深对

类加载器之URLClassLoader的简单demo

最近,看了一点反射相关的知识,感觉Java 的知识还有很多需要学习的,这也是一个很大的挑战吧。
这里写了一个小 demo,来加深对于反射的理解。

public class Test {
	public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException {
		URL[] urls = new URL[] {new URL("Http://192.168.119.132:8080/images/animal.jar")};
		URLClassLoader classLoader = new URLClassLoader(urls);
		//加载类以后就可以得到 Class 对象了
		Class<?> clazz = classLoader.loadClass("com.learn.animal.Dog");
		classLoader.close();  //加载完类以后就可以删除了。
		//关闭 classLoader, 否则会造成 资源泄露  Resource leak
		//这里不使用默认的构造器,使用带参数的构造器 获取特殊的构造器
		Constructor<?> con = clazz.getDeclaredConstructor(String.class, int.class, int.class);
		//使用构造器创建对象
		Object ob = con.newInstance("小黑",12,50);
		//在调用 Dog 对象的 say 方法,返回对 Dog 对象自己的描述
		Method mtd0 = clazz.getMethod("say", new Class<?>[] {});  
		String dogSay = (String)mtd0.invoke(ob, new Object[] {});  
		System.out.println(dogSay);
		//再使用setter 方法,改变属性  模拟 Dog 对象,逐渐长大,变胖  哈哈!
		System.out.println("Three years later......");
		Method mtd1 = clazz.getMethod("setAge", int.class);
		mtd1.invoke(ob, 15);
		Method mtd2 = clazz.getMethod("setWeight", int.class);
		mtd2.invoke(ob, 70);
		//注意这些方法是有返回值的!  返回值都是 Object 类型,需要自己强转类型
		dogSay = (String)mtd0.invoke(ob, new Object[] {});  
		System.out.println(dogSay);
		System.out.println("It's over!");
	}
}

这里的 URL 资源,我用的是虚拟机里面的搭建的简单的 Nginx 服务器,也是看着别人的教程搭建的,很简陋的一个服务器,哈哈。但是,这里足够使用了,如果没有条件,或者想简单一点,可以使用本地的文件系统。
使用 file:///jar包地址 这个替换就行了。

这里使用的 jar 包也很简单,但是我直接打成了 jar 包,只有 class 文件了,我反编译以下,把代码图片贴出来吧。
这个反编译不是全部代码,但是细节很简单,只有一个 say() 方法,可以参照下面的运行截图,补全。

在这里插入图片描述

然后是运行截图,注意我这里这个 -encoding utf-8 是指定使用编码字符集,因为cmd里面执行代码,如果有中文可能无法通过编译。

运行截图

总结:Java 的 URLClassLoader 简单使用也不是那么复杂,虽然技术本身很复杂,但是学习也不是一蹴而就的,学习也是一个过程,保持进步,继续努力。

到此这篇关于一个简单的类加载器URLClassLoader案例的文章就介绍到这了,更多相关类加载器URLClassLoader案例内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一个简单的类加载器URLClassLoader案例

本文链接: https://www.lsjlt.com/news/203149.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作