java问题:try()括号里面的内容为什么不能放到外面?可能出错的地方不是应该是try{}里面的内容吗?

try (
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
) {
String inputLine, outputLine;
KnockKnockProtocol kkp = new KnockKnockProtocol();
outputLine = kkp.processInput(null);
out.println(outputLine);

while ((inputLine = in.readLine()) != null) {
outputLine = kkp.processInput(inputLine);
out.println(outputLine);
if (outputLine.equals("Bye"))
break;
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
这段代码改为

因为有些代码在编译的时候就会检测会不会有明显的,也就是eclipse预定义的一些exception

所以需要你给抛出异常,你如果写外面是不会抛出这些异常的,所以编译时会报错,不过你如果不想写try里面,你可以在方法上写Throws Exception,

这样就可以不写try块



如果你非要加,可以如下这样加,但没什么意义

try (
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                BufferedReader in = new BufferedReader(
                    new InputStreamReader(
                        socket.getInputStream()));  
        ) {
        try {
            String inputLine, outputLine;
            KnockKnockProtocol kkp = new KnockKnockProtocol();
            outputLine = kkp.processInput(null);
            out.println(outputLine);

            while ((inputLine = in.readLine()) != null) {
                outputLine = kkp.processInput(inputLine);
                out.println(outputLine);
                if (outputLine.equals("Bye"))
                    break;
            }
            socket.close();
            } catch (IOException e) {
            e.printStackTrace();
        }
        } catch (IOException e) {
            e.printStackTrace();
        }

追问

好像是JDK1.7之后才有的try-catch-research语句

追答

这个最初就有了,现在用的大多是1.5,1.6的jdk

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-05-14
首先你要清楚try(){}第一个括号里面是干什么的,这个括号在JDK1.7之前是没有的,是1.7的新特性,括号里的内容支持包括流以及任何可关闭的资源,数据流会在 try 执行完毕后自动被关闭,而不用我们手动关闭了本回答被网友采纳