两种类型的try catch块之间的区别

问题描述 投票:1回答:3

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

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用作trysomecode){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有什么区别???

java try-catch
3个回答
0
投票

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

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


0
投票

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

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

如果您在try()块中打开的所有资源都实现了autocloseable接口qazxsw poi


0
投票

第二个需要https://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html来关闭finally {}。第一个将自动关闭。第一个需要jdk1.7或更高版本。

© www.soinside.com 2019 - 2024. All rights reserved.