我有一些代码:
public static void a() throws NumberFormatException {
return;
}
public static void b() throws InterruptedException{
return;
}
public static void main(String[] args) {
a();
b();
}
Eclipse说我必须将try / catch包围到函数调用b(),但是我不必使用()调用。为什么?如何在调用时使用try和catch来创建函数make?
答案 0 :(得分:6)
由于InterruptedException
是已检查的例外,NumberFormatException
是未经检查的过期。
对于已检查的异常,编译器强制您使用try-catch
阻止它们或使用throws
声明它们,而对于未检查的异常,try-catch
阻止不是强制性的。
当函数a()
抛出NumberFormatException
(未经检查的异常)时,编译器不会强制您使用try-catch
包围函数调用。
当函数b()
抛出InterruptedException
(已检查异常)时,编译器会强制您使用try-catch
包围函数调用,或使用throws
声明它们。
答案 1 :(得分:2)
NumberFormatException
不是一个经过检查的异常(即因为它有java.lang.RuntimeException作为其基类),这意味着开发人员不会被迫处理(开发人员的选择是否处理它) )当开发人员选择不处理异常时,如果发生异常,它将由JVM处理。
其中InterruptedException
(即因为它有java.lang.Exception作为其基类)是一个经过检查的异常,这意味着开发人员每次都要使用try-catch块或者通过在Throws子句中声明异常。
看看这个example。
答案 2 :(得分:1)
这是因为NumberFormatException
扩展了RuntimeException
- 即unchecked
例外。虽然InterruptedException
是checked
例外 - 但应该在try...catch
块中捕获,或者您应该将throws
添加到main()
方法。
答案 3 :(得分:1)
因为NumberFormatException()是未经检查的异常,所以检查了InterruptedException,你必须使用try-catch来检查异常,但是你不必检查try-catch - 那么每个方法都会有try-catch。
答案 4 :(得分:1)
NumberFormatException是一个RuntimeException - >未选中
InterruptedException是一个已检查的异常
我发现Java Tutorial非常有用于了解Java及其API,事实上,我仍然经常使用它:
http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html
答案 5 :(得分:0)
public class InterruptedException 扩展异常 线程在等待,休眠或以其他方式占用时抛出,并且线程在活动之前或期间被中断。有时,方法可能希望测试当前线程是否已被中断,如果是,则立即抛出此异常。
但是对于第一种情况,它不会要求NumberFormatException是未经检查的expcetion。
答案 6 :(得分:0)
扩展Exception
的所有RuntimeException
并不意味着明确的try-catch块。它们被称为Unchecked
。理论上,这些异常保留给VM抛出的不可恢复的运行时错误。然而,它们现在被普遍使用,因为很多人同意说Checked
例外机制是一个糟糕的设计概念。
当您的程序无法从错误中恢复并让它们传播到横向层异常处理时,您通常会使用Unchecked
,该异常处理将负责正确记录和/或向用户显示错误。
检查异常通常用于需要调用者处理错误的情况,因为它能够从中恢复或触发特定行为。
答案 7 :(得分:0)
关键字throws
声明方法可能抛出该异常。虽然必须使用未经检查的异常处理已检查的异常,但这是可选的。在你的情况下,抛出一个NumberFormatException,它是从RuntimeException派生的,根据定义是一个未经检查的异常,见Section 11.2: Compile-Time Checking of Exceptions:
未经检查的异常类是RuntimeException类 它的子类,以及类Error和它的子类。所有其他 异常类是检查异常类。
根据定义,类b抛出的InterruptedException是一个经过检查的异常(必须在try-catch块中捕获)。
答案 8 :(得分:0)
Java有两种处理异常的方法 -
1. surround try/catch
2. propagate exeption
如果要在本地处理此异常,请使用try / catch块。基本上,在try
块中是一个有可能抛出异常的代码。
但如果您希望throws SomeException
可以处理exception
这个问题,那么您可以在方法签名中使用calling method
... calling method
也可以传播此exception
try/catch
1}}进一步向上......如果所有方法都不会Java Virtual Machine
此异常,execution time
{{1}}会抛出它{/ 1}}