2013-07-18 24 views
0

在Java中,有一些类型的异常需要一个抛出声明:哪个异常需要该方法的throws语句?

public void myMethod() throws IOException { 
    throw new IOException("Error!"); 
} 

而有的则没有:

public void myOtherMethod() { 
    throw new IllegalArgumentException("Error!"); 
} 

public void myThirdMethod() { 
    throw new Error("Error!"); 
} 

第一种方法不会编译wthout的throws声明。

确定Exception/Error是否需要throws陈述的标准是什么?

+0

http://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation – sanbhat

+1

http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime的可能DUP。 html – kosa

+0

由于缺乏研究而被投票。这是Java 101. –

回答

2

由编译器检查并投诉的异常被称为在java中检查异常

在编译时,java编译器检查程序是否包含 处理程序以检查异常。 Java编译器分析检查异常的方法可能是执行方法或 构造函数。对于每个检查的异常(可能的结果),方法或构造函数的抛出子句必须提及该异常的类或 的超类。

了解更多从JLS:http://docs.oracle.com/javase/specs/jls/se5.0/html/exceptions.html

IOException异常是经过检查的异常,因此Java编译器询问您是否要抓住它或把它。虽然IllegalArgumentException是运行时异常,并且未被编译器检查或投诉。

1

来自RuntimeException的异常不需要声明,其他人也可以。

+0

'RuntimeException'是'Exception'的子类,因此可以解释哪个'Exception'不需要'throws',但'Error'不是'RuntimeException'的子类,那么怎么做我们在该标准中包含了'错误'? – gdiazc

+0

错误不是Exception的子类。他们不需要声明(计数未经检查,如运行时异常),但不应该抛出或捕捉它们,除非你真的知道自己在做什么。任何不是RuntimeException或Error的Throwable被选中。 – kiheru

相关问题