两种类型的try catch块

时间:2017-05-27 07:26:18

标签: java try-catch

我最近看到了一个代码......

try (   Socket socket = new Socket("localhost", 2003);
        Writer writer = new OutputStreamWriter(socket.getOutputStream());){
        writer.write("data");
        writer.flush();

    } catch (IOException e) {

        e.printStackTrace();
    }
此代码中的

try catch用作try somecode ){ again some code } catch(){}; 它工作正常;

然后我以这种方式尝试了这段代码

try {
        Socket socket = new Socket("localhost", 2003);
        Writer writer = new OutputStreamWriter(socket.getOutputStream());
        writer.write("data");
        writer.flush();

    } catch (IOException e) {

        e.printStackTrace();
    }

此处try catch用作try { again some code } catch(){}; 哪个也在工作......我已经熟悉这种模式......

所以我的问题是......

try catch

的这两种实施方式有何区别?

3 个答案:

答案 0 :(得分:0)

Java 1.7引入了try资源的功能,您不需要显式关闭在try块中打开的资源

在1.7之前,你总是要记得关闭finally块中的资源。

如果您在try()块中打开的所有资源都实现了自动分解接口 https://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html

答案 1 :(得分:0)

第二个需要$ getValueForKey keys.txt 'Eclipse_Url' "http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/3/eclipse-jee-neon-3-win32-x86_64.zip&mirror_id=1135" 关闭finally {}。第一个将自动关闭。第一个需要jdk1.7或更高版本。

答案 2 :(得分:0)

第一个解决方案是“try-with-resources”的示例,您可以在try块中声明可以访问的资源。 如果您使用AutoClosable的实例,则始终可以执行此操作。在finally内的最后一行终止后,Java将在隐式try块中为您关闭这些资源。这非常有用,因为您不需要自己发布这些资源。

第二个例子不会关闭套接字和编写器,因此在功能上不等于解决方案1。