为什么我的Class.forName()抛出的异常不是ClassNotFoundException,而是RuntimeException?

文章详细介绍了Java类加载器Axis2重写findClass方法导致Class.forName()抛出RuntimeException的原因,解释了Axis2如何通过替换类名路径并尝试加载类,并在失败时抛出特定类型的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么我的Class.forName()抛出的异常不是ClassNotFoundException,而是RuntimeException?
时间:2007-06-18  www.jubao163.com  来源: 不详


 所属分类:Java J2SE / 基础类
-----------------------------------------


try { 
  Class c = Class.forName("aaaaa"); 
  c.newInstance(); 
} catch (Exception e) { 
  if (e instanceof ClassNotFoundException) 
    System.out.println("ClassNotFoundException"); 
  else if (e instanceof RuntimeException)  
    System.out.println("RuntimeException"); 



----------------------------------------------------------------------


绝对是ClassNotFoundException 


你真的执行过吗 






--------------------------------------------------------


度过ClassNotFoundException 


--------------------------------------------------------


试过了ClassNotFoundException 


--------------------------------------------------------


哎,终于知道原因了!我用的是Axis2包,而Axis2重写了类加载器ClassLoader类中的findClass方法,如下: 
protected Class findClass(String name) throws ClassNotFoundException { 
        Class clazz; 
        try { 
            clazz = super.findClass(name); 
        } catch (ClassNotFoundException e) { 
            byte raw[]; 
            try { 
                String completeFileName = name; 
                /** 
                 * Replacing org.apache. -> org/apache/... 
                 */ 
                completeFileName = completeFileName.replace(’.’, ’/’).concat(".class"); 
                raw = getBytes(completeFileName); 
                if (raw == null) { 
                    throw new ClassNotFoundException("Class Not found : " + name); 
                } 
            } catch (Exception ex) { 
                // TODO: This, or throw new ClassNotFoundException? 
                throw new RuntimeException(ex); 
            } 
            clazz = defineClass(name, raw, 0, raw.length); 
        } 
        return clazz; 
    } 
INSTRUMENTATION_STATUS: class=android.virtualdevice.cts.camera.VirtualCameraTest INSTRUMENTATION_STATUS: current=1 INSTRUMENTATION_STATUS: id=AndroidJUnitRunner INSTRUMENTATION_STATUS: numtests=1 INSTRUMENTATION_STATUS: stream= android.virtualdevice.cts.camera.VirtualCameraTest: INSTRUMENTATION_STATUS: test=initializationError INSTRUMENTATION_STATUS_CODE: 1 INSTRUMENTATION_STATUS: class=android.virtualdevice.cts.camera.VirtualCameraTest INSTRUMENTATION_STATUS: current=1 INSTRUMENTATION_STATUS: id=AndroidJUnitRunner INSTRUMENTATION_STATUS: numtests=1 INSTRUMENTATION_STATUS: stack=java.lang.RuntimeException: Failed loading specified test class 'android.virtualdevice.cts.camera.VirtualCameraTest' at androidx.test.internal.runner.DirectTestLoader.doCreateRunner(DirectTestLoader.java:50) at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:64) at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:842) at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:663) at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:437) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2600) Caused by: java.lang.ClassNotFoundException: android.virtualdevice.cts.camera.VirtualCameraTest at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:607) at androidx.test.internal.runner.DirectTestLoader.doCreateRunner(DirectTestLoader.java:44) ... 5 more Caused by: java.lang.ClassNotFoundException: android.virtualdevice.cts.camera.VirtualCameraTest ... 8 more INSTRUMENTATION_STATUS: stream= Error in initializationError(android.virtualdevice.cts.camera.VirtualCameraTest): java.lang.RuntimeException: Failed loading specified test class 'android.virtualdevice.cts.camera.VirtualCameraTest' at androidx.test.internal.runner.DirectTestLoader.doCreateRunner(Dire
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值