`
atell
  • 浏览: 158671 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

java.lang.NoClassDefFoundError可以捕获

阅读更多

原本以为类不存在的Error不能捕获,想不到是可以的,记录一下。注意,这和反射遇到的“java.lang.ClassNotFoundException”是不一样的。

 

以下代码,编译完后,我删除了Demo$T2.class,如果不添加try-catch,会出现:

Exception in thread "main" java.lang.NoClassDefFoundError: com/atell/Demo$T1
	at com.atell.Demo.main(Demo.java:10)
Caused by: java.lang.ClassNotFoundException: com.atell.Demo$T1
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	... 1 more

 

添加了tay-catch之后,就打印“捕获了Error”

 

package com.atell;

import java.io.IOException;

public class Demo {

    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        try {
            T2.x = 9;
        } catch (Error e) {
            System.out.println("捕获了Error");
        }
    }

    static class T2 {

        static int x;
    }

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics