为什么报错呢?
class   ThrowsDemo{ 
 	static   void   throwMethod()   { 
 		System.out.println( "inside   throwMethod "); 
 		//throw   new   
IllegalAccessException( "demo ");  		 
 	}  	 
 	public   static   void   main(String   arg[]){ 
 		try{ 
 			throwMethod(); 
 		}catch(IllegalAccessException   e){   //改成(Exception   e)就对了。不晓得为什么? 
 			System.out.println( "Caught "   +e); 
 		} 
 	} 
 }
------解决方案--------------------class ThrowsDemo{ 
 static void throwMethod() throws IllegalAccessException { 
 System.out.println( "inside throwMethod "); 
 throw new IllegalAccessException( "demo ");   
 }   
 public static void main(String arg[]){ 
 try{ 
 throwMethod(); 
 }catch(IllegalAccessException e){ //改成(Exception e)就对了。不晓得为什么? 
 System.out.println( "Caught " +e); 
 } 
 } 
 }
------解决方案--------------------下面这段是JAVA6.0的API里对IllegalAccessException的解释: 
 public class IllegalAccessException 
 extends Exception 
 当应用程序试图反射性地创建一个实例(而不是数组)、设置或获取一个字段,或者调用一个方法,但当前正在执行的方法无法访问指定类、字段、方法或构造方法的定义时,抛出 IllegalAccessException。    
 我把你的程序改成如下的代码,它可以正常编译运行。 
 class ThrowsDemo{ 
 static void throwMethod() { 
 System.out.println( "inside throwMethod "); 
 //throw new IllegalAccessException( "demo ");   
 }   
 public static void main(String arg[]){ 
 //try{ 
 throwMethod(); 
 //}catch(IllegalAccessException e){ //改成(Exception e)就对了。不晓得为什么? 
 //System.out.println( "Caught " +e); 
 //} 
 } 
 } 
 你想一下,这个原因不就很清楚了吗?
------解决方案--------------------你的throwMethod()本意是想抛出一个IllegalAccessException异常,然后在main函数里调用的时候捕捉住这个异常是吧, 但是看你的代码,你在throwMethod()方法里已经把throw new IllegalAccessException( "demo ");注释掉了,所以这个方法就不会再抛出IllegalAccessException异常。 所以你在下面还 要捕捉这个异常的话,就会报错了。   
 改成Exception e 之所以能成功的原因是,Exception是所有异常的基类,它的范围最广不是针对具体哪一个异常的,它可以捕捉到所有类型的异常信息。   
 如果你想捕捉具体的异常的话,必须先明确你调用的方法里会不会抛出这个具体的异常,就是说前后你得匹配起来才行,如果这个地方我捕捉一个
FileNotFoundException异常的话,照样会出错,因为那个方法里根本就不会抛出这个异常。