捕捉catch里的class是方法声明的父类或本身。func1()声明抛出Throwable,所以catch也要是Throwable(没有父类了)。

解决方案 »

  1.   

    Exception继承自Throwable,Exception是Throwable,但Throwable不是Exception。所以无法catch到,只能抛出。所以main方法也要抛出。
      

  2.   

    但是我上面的程序捕捉到了异常,程序运行的结果是:
    This is the main catch
      

  3.   

    可我上面的程序没有错误,扑捉到了异常,程序运行结果是:
    This is the main catch
      

  4.   

    晕,你打印当然还是打印你那句话了啊。你catch到异常后用e.printStack()就可以看到效果了public class Excepts {
    public static void func1() throws Throwable {
    throw new Exception("from func1");
    } public static void main(String[] Str) throws Throwable {
    try {
    func1();

    // catch (Exception e)
    catch (Throwable e)
    {
    e.printStackTrace();
    System.out.println("This is the main catch");
    }
    }}
    打印:
    java.lang.Exception: from func1
    at com.withiter.test2.Excepts.func1(Excepts.java:5)
    at com.withiter.test2.Excepts.main(Excepts.java:10)
    This is the main catch
      

  5.   

    public class Excepts {
        public static void func1() throws Throwable {
            throw new Throwable ("from func1");
        }
     
        public static void main(String[] Str) throws Throwable {
            try {
                func1();
            } 
            catch (Exception e)
           // catch (Throwable e)
            {
                e.printStackTrace();
                System.out.println("This is the main catch");
            }
        }
     
    }
    这样就必须平抛了
      

  6.   

    try中抛出的是Throwable异常,但是catch(Exception e)捕捉到了异常,这是何解
      

  7.   

    按你说的,应该是main函数把异常抛出去了,但是我现在却在main函数内捕捉到了异常,这说明main函数并没有抛出Throwable异常,既然没有抛出Throwable异常,那为何我把main函数中throws Throwable声明去掉就发生错误
      

  8.   

    我想你没搞清我问的问题,我的代码运行没有错误,我的疑问就是为何没错误,按道理我放出的是Throwable异常,但是Catch的是Exception异常,按理说这个Exception是Throwable的子类,它不能被捕捉,但是这里却捕捉了
      

  9.   

    1.编译期检查与运行是不一样的,编译期检查是有限检查。
    2.编译器有责任,你写的也不当。方法里面不会抛出东西,你在方法头上抛出干什么。如果你按照正确的使用了,编译除了问题,那编译器就说不过去了。编译期检查可以是有限的。
    3.func1()方法的写法是不典范的。一般来说,类型应该是向上转换的,就像数值类型的自动隐式转换。也就是说应该父类变成子类,倒过来回丢失成员的,发生不可预料的问题。
      

  10.   

    类型如果是向下转换的,接收的时候要转换过来:(Exception)Throwable
    再例如:
    Object o ="aaaaaaaaa";
    ((String)Object).subString(...);
      

  11.   

    类型如果是向下转换的,接收的时候要转换过来:(Exception)Throwable
    再例如:
    Object o ="aaaaaaaaa";
    ((String)o).subString(...);
      

  12.   

    try中抛出的是Throwable异常,但是catch(Exception e)捕捉到了异常,这是何解我只是想说明Throwable,Exception 的关系范围,这里catch(Exception e)并未捕获到,System.out.println("This is the main catch");这都没执行
      

  13.   

    可我上面的程序没有错误,扑捉到了异常,程序运行结果是:
    This is the main catch方法声明了异常A,那么调用者必须捕捉A(RuntimeException除外),仅仅捕捉子异常是不能通过编译的。
      

  14.   

    try中抛出的是Throwable异常,但是catch(Exception e)捕捉到了异常,这是何解我只是想说明Throwable,Exception 的关系范围,这里catch(Exception e)并未捕获到,System.out.println("This is the main catch");这都没执行
    你修改了我的程序,你说的这些关系范围我知道,不过还是谢谢你的详细解释
      

  15.   

    你抛出时,包装成了Throwable!!!然后你用一个Exception去捉?怎么捕捉的到?只能大捉小!不能小捉大。懂?你那个方法抛出的是一个new Exception,但是你抛出时,已经变成了一个throwable!所以捕捉时,只能捕捉throwable了。
      

  16.   

    对于异常的处理:如果一个方法抛出了异常,那么调用这个方法的调用者必须处理这个异常或者抛给上一级调用者。这个貌似是在编写代码的时候就会进行检查的。main调用了函数,就需要处理函数抛出的异常咯。