请问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();
}
这段代码改为


qq_遁去的一_1
浏览 268回答 2
2回答

qq_笑_17

首先你要清楚try(){}第一个括号里面是干什么的,这个括号在JDK1.7之前是没有的,是1.7的新特性,括号里的内容支持包括流以及任何可关闭的资源,数据流会在 try 执行完毕后自动被关闭,而不用我们手动关闭了

呼唤远方

因为有些代码在编译的时候就会检测会不会有明显的,也就是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();        }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
JavaScript