RT..代码如下:public class Rethrowing
{
public static void f() throws Exception
{
System.out.println("originating the exception in f()");
throw new Exception("thrown from f()");
}
public static void g() throws Throwable
{
try
{
f();
}
catch(Exception e)
{
System.out.println("Inside g(), e.printStackTrace()");
e.printStackTrace();
throw e;  // 17
// throw e.fillInStackTrace(); //18
}
}
public static void main(String[] args) throws Throwable   //这里不明白.
{
try
{
g();
}
catch(Exception e)
{
System.out.println("Caught in main, e.printStackTrace()");
e.printStackTrace();
}
}
}如上. 在main()方法那行如果去掉 throws Throwable 编译时就会出错:
Rethrowing.java:28: unreported exception java.lang.Throwable; must be caught or
declared to be thrown
   
但是mian()方法里面并没有抛出异常为什么要有异常说明(throws) ? 谢谢.

解决方案 »

  1.   

    g()抛出异常但是声明g()方法时已经做过异常说明了啊:
    public static void g() throws Throwablemian()方法调用g()方法为什么还要做异常说明呢..?
      

  2.   

    在g()中throw e;  // 17
    在f()中throw new Exception("thrown from f()");
      

  3.   

    方法 g() 可能抛出异常 Throwable (g()中已经声明此可能性),而main()方法在调用g()时,仅仅捕获的是Exception 异常,因此..
      

  4.   

    因为异常必须一层层向外抛出啊
    否则当g抛出Throwable的时候,main又没有catch到,那main也必须向上抛出啊,因为到最后要找到一个处理者
      

  5.   

    同意楼上的
    exception 是 throwable的子类,所以你的catch 没有catch到g抛出的throwable
      

  6.   

    这里好象有点异常继承的味道。如果这样定义:
    public static void g() 
    {}那就不用了,因为g()没有抛出异常!