另类NoClassDefFoundError

通常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  }

你可能感兴趣的:(另类NoClassDefFoundError)