• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

异常不需要被抛出,但IOException异常

java 来源:Jeremy Levett 8次浏览

为什么下面的代码编译正常,但被调用的方法不需要抛出Exception?是不是Exception检查异常,而不是未经检查的异常?请澄清。异常不需要被抛出,但IOException异常

class App { 
    public static void main(String[] args) { 
     try { 
      amethod(); 
      System.out.println("try "); 
     } catch (Exception e) { 
      System.out.print("catch "); 
     } finally { 
      System.out.print("finally "); 
     } 
     System.out.print("out "); 
    } 
    public static void amethod() { } 
} 

如果我想使用一个IOexception尝试捕捉(checked exception)时,该方法被调用需要扔IOException。我明白了。

import java.io.IOException; 

class App { 
    public static void main(String[] args) { 
     try { 
      amethod(); 
      System.out.println("try "); 
     } catch (IOException e) { 
      System.out.print("catch "); 
     } finally { 
      System.out.print("finally "); 
     } 
     System.out.print("out "); 
    } 
    public static void amethod() throws IOException { } 
} 


===========解决方案如下:

不是 ‘例外’ checked异常,而不是一个未经检查的异常?

是的。

但即使我们知道该方法本身不会丢弃Exception本身,代码catch(Exception e){仍然可以执行。 try块中的代码仍然可以抛出继承自Exception的内容。这包括RuntimeException及其子类,它们未被选中。

catch(IOException e){另一方面,只能捕获检查异常。 (Java不允许多继承,所以任何属于IOException的子类都不可能是RuntimeException的子类。)编译器可以很容易地发现try块中的任何代码都不可能抛出IOException(因为任何引发检查异常的方法都必须明确地说明),从而允许它标记代码。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)