Java 嵌套的try if没有catch有什么用法吗?
从Java书籍中找到以下代码 public void writeFileString文件名,字符串内容{ File File=新文件名; 试一试{ 尝试PrintWriter输出=新建PrintWriternew FileWriterfile{ output.printlcontent; output.println; output.printlend写入; } System.out.println文件已成功写入; }捕捉异常{ 例如printStackTraceSystem.out; } } 上面的代码没有什么问题,我只是看不出有没有必要使用不定义内部catch块的嵌套try。或者说,这样做有什么目的是我错过的 修订守则: public void writeFileString文件名,字符串内容{ File File=新文件名; 尝试PrintWriter输出=新建PrintWriternew FileWriterfile{ output.printlcontent; output.println; output.printlend写入; System.out.println文件已成功写入; }捕捉异常{ 例如printStackTraceSystem.out; } }Java 嵌套的try if没有catch有什么用法吗?,java,oop,exception,io,try-catch,Java,Oop,Exception,Io,Try Catch,从Java书籍中找到以下代码 public void writeFileString文件名,字符串内容{ File File=新文件名; 试一试{ 尝试PrintWriter输出=新建PrintWriternew FileWriterfile{ output.printlcontent; output.println; output.printlend写入; } System.out.println文件已成功写入; }捕捉异常{ 例如printStackTraceSystem.out; } }
内部尝试是使用资源进行的尝试:
try (PrintWriter output = new PrintWriter(new FileWriter(file)))
这意味着,它管理资源——PrintWriter——在执行此尝试中的每个语句后打开并关闭它。外部try用于捕获错误
Petter Friberg建议的修改后的代码是等效的。Internal try将自动关闭PrintWriter的资源,从jdk 9,您可以在不使用finally或finally的情况下进行尝试catch@Deadpool:换句话说,在jdk 9之前,开发人员通常必须在finally block中手动关闭它?是的,完全是@Isaac,基本上你在一次尝试捕获中完成所有这些,不需要InnerCatch。我不认为它有多大意义,你可以使用InnerCatch。你可以改为使用InnerCatch,我看不到太多purpose@PetterFriberg你是说最后?不只是一个内心的陷阱,没有外部代码的相同代码并不完全相同。在原始代码中,成功消息是在打印编写器关闭后编写的。在修订后的代码中,它是在结束前编写的。关闭时可能发生异常。@Andy关闭PrintWriter,因为java 7不会在关闭AFIK时抛出IOException,因此无论如何也不会捕获它