另类NoClassDefFoundError

Posted on 2010-07-29 15:54 天快黑了 阅读(291) 评论(0)  编辑  收藏 所属分类: Exception
通常NoClassDefFoundError产生的原因都是由于用到的class在CLASSPATH中找不到。

还有下面一种另类的NoClassDefFoundError:
1. Class A 调用 Class B
2. JVM尝试加载Class B,并执行Class B的静态块
3. Class B的静态块内抛出RuntimeException,从而导致JVM加载Class B失败
4. 之后,任何类只要调用Class B,就会出现NoClassDefFoundError

大家可以运行下面的例子试一下:

1 public class B 
2 {
3     static {
4         String s = null;
5         s.substring(0);
6     }
7 }

 1 public class A 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         try
 6         {
 7             B b = new B();    
 8         }
 9         catch (Throwable e)
10         {
11             e.printStackTrace();
12         }
13 
14         try
15         {
16             B b = new B();    
17         }
18         catch (Throwable e)
19         {
20             e.printStackTrace();
21         }
22     }
23 }

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 5, comments - 25, trackbacks - 0, articles - 1

Copyright © 天快黑了