2010-09-20 59 views
2

宣布与“IllegalAccessException”一个方法时,日食的力量我 声明方法抛出异常为什么只能某些例外声明为在方法签名抛出

public void a() throws IllegalAccessException { 
if(x == 1){ 
    throw new IllegalAccessException("TEST); 
} 
} 

和方法B,使用“IllegalStateException异常“我不需要申报方法抛出一个异常

public void b() { 
if(x == 1){ 
    throw new IllegalStateException("TEST); 
} 
} 

什么是古都例外
之间的不同之处在于一个迫使我寿申报方法是抛出一个异常 ,另一种是不

谢谢

+0

请注意,'IllegalAccessException'并不是用于你的例子中,而是'IllegalStateException'将是合适的。 – jbindel 2010-09-20 22:27:10

回答

10

因为IllegalAccessExceptionRuntimeException(即是检查例外)并且IllegalStateExceptionRuntimeException(即,未经检查的例外)。

阅读以了解更多信息:difference between java.lang.RuntimeException and java.lang.Exception

而在Oracle这样的解释(废话!)网站:http://download.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html

第一种例外的是检查例外。这些都是写得很好的应用程序应该预测并从中恢复的特殊条件。例如,假设应用程序提示用户输入文件名,然后通过将名称传递给java.io.FileReader的构造函数来打开文件。通常,用户提供现有的可读文件的名称,因此FileReader对象的构造成功,并且应用程序的执行正常进行。但有时用户提供不存在文件的名称,构造函数会抛出java.io.FileNotFoundException。一个写得很好的程序会捕获这个异常并通知用户这个错误,可能会提示更正文件名。 检查的异常受到Catch或指定要求的约束。除了由Error,RuntimeException及其子类指示的异常外,所有异常均为检查异常。

第二种异常是错误。这些是应用程序外部的特殊条件,并且应用程序通常无法预测或从中恢复。例如,假设应用程序成功打开一个文件进行输入,但由于硬件或系统故障而无法读取文件。不成功的读取将抛出java.io.IOError。应用程序可能会选择捕获此异常,以便将问题通知给用户 - 但对于程序打印堆栈跟踪并退出也可能有意义。

错误不受限制或指定要求。错误是由Error及其子类指示的那些异常。

第三种异常是运行时异常。这些是应用程序内部的特殊条件,并且应用程序通常无法预测或从中恢复。这些通常表示编程错误,例如逻辑错误或API使用不当。例如,考虑前面描述的将文件名传递给FileReader的构造函数的应用程序。如果逻辑错误导致将null传递给构造函数,构造函数将抛出NullPointerException。应用程序可以捕获此异常,但消除导致异常发生的错误可能更有意义。

运行时异常不受到Catch或指定要求的约束。运行时异常由RuntimeException及其子类指示。

1

正如你可以在JDK的Javadoc中看到,IllegalStateExceptionRuntimeException,这不是IllegalAccessException的情况。

,可以通过本条的Javadoc指出:

的RuntimeException是 那些可以在 Java虚拟机的正常运行期间抛出的异常 超类。

的方法不需要申报 其throws子句中 RuntimeException的可能方法的执行过程中被抛出 但 没有抓到的任何子类。

这解释了区别。

1

IllegalAccessException是一个检查异常。检查异常必须声明或处理,因为它们是预期的操作结果。

IllegalStateException是一个未经检查的异常。未检查的异常通常被认为是编程错误,并且它不会被作为正常程序执行的一部分接收。当编程错误发生时,默认情况下,这些例外将被打印为标准错误,因此开发人员可以确定编程错误是什么。

0

这是Java设计的一部分,有些异常需要“抛出”声明,有些则不需要。那些不被称为“运行时异常”并从“RuntimException”下降。 IllegalAccessException不是运行时异常,并且IllegalStateException是。

差异背后的逻辑是,一般的异常是针对可能在任何时候发生的特殊情况,无论程序员做什么,并且如果他们希望他们的代码被重新设计,应该总是由程序员来处理。 IllegalAccessException或IO Excection可能是由程序员控制之外的硬件故障或访问权限造成的。软件需要在事情发生时做一些事情,并且抛出一个条款迫使程序员去考虑要​​做什么。 IllegalStateException是某种程序员错误的症状,所以不一定需要处理。

相关问题