Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌套的try if没有catch有什么用法吗?_Java_Oop_Exception_Io_Try Catch - Fatal编程技术网

Java 嵌套的try if没有catch有什么用法吗?

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; } }

从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; } }
内部尝试是使用资源进行的尝试:

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,因此无论如何也不会捕获它