Java 例外处理恶作剧
如果我们不编写try-catch块或try-finally块或将异常传递给它的调用函数以检查异常,Java就会出现编译时错误。这一切都很好。但是,我的问题是,为什么catch块是可选的,也就是说,我们可以编写try-block-then-finally块,这不是一件肮脏的事。如果我在某个地方错了,请纠正我。Java 例外处理恶作剧,java,exception-handling,Java,Exception Handling,如果我们不编写try-catch块或try-finally块或将异常传递给它的调用函数以检查异常,Java就会出现编译时错误。这一切都很好。但是,我的问题是,为什么catch块是可选的,也就是说,我们可以编写try-block-then-finally块,这不是一件肮脏的事。如果我在某个地方错了,请纠正我。 调用方法也可以处理异常 最后允许阻塞,因为即使引发异常,也可能有一些代码应该运行。即使引发异常,您也可能希望关闭某些数据库连接或资源 调用方法也可以处理异常 最后允许阻塞,因为即使引发异常
- 调用方法也可以处理异常
允许阻塞,因为即使引发异常,也可能有一些代码应该运行。即使引发异常,您也可能希望关闭某些数据库连接或资源最后
- 调用方法也可以处理异常
允许阻塞,因为即使引发异常,也可能有一些代码应该运行。即使引发异常,您也可能希望关闭某些数据库连接或资源最后
- 如果抛出一个,则不必声明方法
抛出它李>
- 如果调用一个抛出一个的方法,无论它是在try块中还是在其他块中,您都不会被迫
捕获它(也不会
抛出它,请参见上文)
- 如果调用一个抛出一个的方法,无论它是在try块中还是在其他块中,您都不会被迫
- 如果抛出一个,则不必声明方法
抛出它李>
- 如果调用一个抛出一个的方法,无论它是在try块中还是在其他块中,您都不会被迫
捕获它(也不会
抛出它,请参见上文)
- 如果调用一个抛出一个的方法,无论它是在try块中还是在其他块中,您都不会被迫
catch
块
未经检查的异常在Java中有特殊处理:
Java中所谓的“未检查的异常”是明确定义的。所有异常最终都是可抛出的,未经检查的异常要么继承
错误
要么运行时异常
如果尝试块中的方法抛出未经检查的异常,则可以忽略捕获
块
未经检查的异常在Java中有特殊处理:
Java中所谓的“未检查的异常”是明确定义的。所有异常最终都是可丢弃的,未经检查的异常要么继承
错误
,要么继承运行时异常
,好吧,这不是一种真正干净/好的编码方式,但您告诉编译器您知道可能会出错。这并不意味着它是一个好的实践,但最终它是你的代码。编译器之所以让你对“try”感到不满,是因为你不知何故监督了它。这对于未检查的异常是特殊的。在Oracle上阅读更多关于它的信息。好吧,这不是一种真正干净/好的编码方式,但你告诉编译器你知道可能会出错。这并不意味着它是一个好的实践,但最终它是你的代码。编译器之所以让你对“try”感到不满,是因为你不知何故监督了它。这对于未检查的异常是特殊的。请在Oracle上阅读更多关于它的信息。Try finally通常用于处理关键代码以执行。类似于释放资源或锁定对象。这里的目的不是处理异常,而是确保即使发生意外异常资源也能安全释放。这是因为最终在所有场景中执行阻塞。唯一的例外是JVM不应该关闭。Try finally通常用于处理关键代码以执行。类似于释放资源或锁定对象。这里的目的不是处理异常,而是确保即使发生意外异常资源也能安全释放。这是因为最终在所有场景中执行阻塞。唯一的例外是JVM不应该关闭。如果在方法签名中声明异常(选中或未选中),则不会强制为try块使用catch子句。对于未检查的异常,您甚至不需要声明它
然而,无论是否发生异常,您通常都需要释放或释放资源。所以你可以这样写:
public void someMethod() throws IOException {
Object resource = getSomeResource();
try {
// Imagine, all following calls could throw an IOException
workWithResource(resource);
continueWorkWithResource(resource);
stillDoSomeWorkOnResource(resource);
} finally {
releaseResource(resource);
}
}
即使其中一个方法抛出IOException,资源也会在将异常传播到该方法的调用方之前释放。如果没有例外,资源也会被释放
始终执行finally块。如果在方法签名中声明异常(选中或未选中),则不会强制为try块使用catch子句。对于未检查的异常,您甚至不需要声明它 然而,无论是否发生异常,您通常都需要释放或释放资源。所以你可以这样写:
public void someMethod() throws IOException {
Object resource = getSomeResource();
try {
// Imagine, all following calls could throw an IOException
workWithResource(resource);
continueWorkWithResource(resource);
stillDoSomeWorkOnResource(resource);
} finally {
releaseResource(resource);
}
}
即使其中一个方法抛出IOException,资源也会在将异常传播到该方法的调用方之前释放。如果没有例外,资源也会被释放
始终执行finally块。对不起,您是说在
try{}catch{}finally{}
中,catch
clouse是可选的吗???从没听说过。我想说它是强制性的,而finally是可选的。@Antoniossss Yes catch是可选的。。它是正确的,我们可以写try{}finally{}。。如果它是选中的异常,我们必须在调用函数时处理它,因为它是未选中的。编译器不会对此抱怨。。有关详细信息,请参阅链接。对不起,你是说在中,try{}catch{}finally{}
中的catch
clouse是可选的吗???从没听说过。我想说它是强制的,finally是可选的。@Antoniossss Yes catch是可选的。.它正确我们可以写try{}finally{}。.如果它是选中的异常,我们必须在调用函数时处理它,因为它是未选中的。编译器不会对此抱怨。.Pl