问个关于class loader的问题

linhua11 linhua11 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
package com.dotest;

import java.net.URL;
import java.net.URLClassLoader;

public class Test {

private URLClassLoader loader;

public void doTest() {
resetLoader();
try {
Class testClass = Class.forName("com.dotest.test.ScopeTest", true,
loader);
TestIntf test = (TestIntf) testClass.newInstance();
test.doTest();
System.out.println("finished");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void resetLoader() {
loader = null;
try {
System.out.println("url: "
+ this.getClass().getResource("/testA.jar"));
loader = new URLClassLoader(new URL[] { this.getClass()
.getResource("/testA.jar") });
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args) {
Test test = new Test();
test.doTest();
}
}


package com.dotest;
public interface TestIntf {
public void doTest();
}


以下代码在单独的jar里面
package com.dotest.test;

import com.dotest.TestIntf;

public class ScopeTest implements TestIntf {
@Override
public void doTest() {
System.out.println("doTest 111");
}
}


运行结果:
url: file:/C:/Users/linh/workspace/DynamicClassLoaderTest/bin/testA.jar
Exception in thread "main" java.lang.ClassCastException: com.dotest.test.ScopeTest cannot be cast to com.dotest.TestIntf
at com.dotest.Test.doTest(Test.java:15)
at com.dotest.Test.main(Test.java:51)
...全文

相关推荐

深入Class Loader

深入 Java 的Class Loader(类加载器)

abombhz

RK烧录卡在设备未识别?揭秘MASKROM与LOADER底层握手逻辑

USB设备识别是嵌入式烧录的基础环节,其本质是主机与芯片间遵循特定协议的硬件级握手过程。当RK平台出现‘设备未识别’或‘未知设备’时,问题往往不在驱动缺失,而在于MASKROM/LOADER模式下非标准USB枚举流程的失败——这涉及USB Class(0xFF)、Vendor ID(0x2207)等底层协议匹配,以及信号完整性、供电纹波、时序容错等物理层约束。技术价值在于绕过Windows默认USB栈,通过rkusb.sys建立专用通信通道;典型应用场景包括Rockchip开发板首次固件刷写、eMMC救砖及

Creamy络

深入解析TI Stellaris微控制器ROM Boot Loader与驱动库设计

在嵌入式系统开发中,Boot Loader是系统上电后执行的第一段代码,负责硬件初始化、应用程序加载与固件更新,其设计直接影响系统的启动可靠性与可维护性。其工作原理通常基于特定的硬件触发条件(如检查Flash特定地址内容)来决定启动路径,并通过串行通信协议与主机交互。这一机制的技术价值在于为资源受限的微控制器提供了可靠的、可远程操作的固件更新通道,是实现设备后期功能升级与故障修复的关键。在ARM Cortex-M内核的微控制器上,这种能力尤为重要。应用场景广泛覆盖物联网终端、工业控制、消费电子等需要现场升级

chuannaoxuan4674

深入理解vue-loader如何使用

本篇文章主要介绍了vue-loader,vue-loader是webpack下loader插件 可以把.vue文件输出成组件,有兴趣的可以了解一下

weixin_38549721

class:Cloud Loader和ASsmbler系统

Cloud Loader和ASsembler系统(CLASS) 欢迎来到CLASS! 威斯康星大学麦迪逊分校的ECE554 2021Spring组装工。 Cloud Loader and Assembler System(CLASS)是一个简单的工具,它基于pRISCas允许用作加载到FPGA的设计的自定义ISA的准系统。 制作说明 UNIX和类UNIX 可以使用许多make实用程序之一在UNIX系统上进行编译。 仅制作Shell,键入make就足够了。 完成make后,只需转到bin目录(如果尚不存在,将创建该目录)并运行class或cload 。 其他有用的目标: all -默认目标,构建class可执行文件和cload可执行文件调试符号和无优化(调试) clean -清理解决方案,删除可执行文件和对象 release -将项目构建为发布版本(也就是说,不调试符号,并启用优化功

火君
评论 7
收藏 已收藏
分享
返回顶部
linhua11
Java SE 62,620 成员 307,251 内容