package a;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Main {
public static void main(String[] args) {
OutputStream out = null;
try {
out = new BufferedOutputStream(new FileOutputStream("temp.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
//TODO: Log the exception and handle it,
// for example show a message to the user
} finally {
//out.close(); //Second level exception is
// occurring in closing the
// Stream. Move it to a new method:
closeOutPutStreamResource(out);
}
}
private static void closeOutPutStreamResource(OutputStream out){
try {
out.close();
} catch (IOException e) {
// TODO: log the exception and ignore
// if it's not important
// OR
// Throw an instance of RuntimeException
// or one of it's subclasses
// which doesn't make you to catch it
// using a try-catch block (unchecked)
throw new CloseOutPutStreamException(e);
}
}
}
class CloseOutPutStreamException extends RuntimeException{
public CloseOutPutStreamException() {
super();
}
public CloseOutPutStreamException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public CloseOutPutStreamException(String message, Throwable cause) {
super(message, cause);
}
public CloseOutPutStreamException(String message) {
super(message);
}
public CloseOutPutStreamException(Throwable cause) {
super(cause);
}
}
7条答案
按热度按时间l7wslrjt1#
我认为最干净的方法是创建一个方法,该方法捕获在其主体中发生的异常。但是,它可能非常依赖于您正在处理的情况和代码类型。
你要问的一个例子是关闭
Stream
在一个try
-catch
-finally
阻止。例如:这里我演示了在
finally
块,但同样的情况也适用于catch
阻止。在我看来,写作方法如
closeOutPutStreamResource
这可能很有用,因为它们打包了一个锅炉板代码来处理非常常见的异常,并且使您的代码更加优雅。你也可以选择
catch
并登录异常closeOutPutStreamResource
或者throw
它将应用到程序的其他层。但是将这个不重要的检查异常 Package 到RuntimeException
不需要抓。希望这会有帮助。
yebdmbv42#
例如,要“处理”异常:
更多信息请参阅:请参阅:https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html
但是,如果您想在try catch中获得另一个catch,可以执行以下操作:
小心使用嵌套的try/catch,当try-catch变得复杂/庞大时,请考虑将其拆分为自己的方法。例如:
2w2cym1i3#
您可以在主catch块中添加新的try catch块。
o4tp2gmn4#
我建议您调用另一个方法,执行所需的操作,而不是级联try/catch(与大多数其他答案一样)。通过这种方式,您的代码将更易于维护。
在这个方法中,放置一个try/catch块来保护代码。
例子:
omjgkv6w5#
可以在方法或块中的任何位置使用try-catch块,因此也可以在catch块中编写try-catch。
nafvub8i6#
当catch块抛出异常时,没有必要像这里的所有答案所建议的那样使用嵌套的try-catch块。可以用try catch括起调用方方法来处理该异常。
6g8kf2rb7#
在通常的试一试/接球情况下,要做的就是: