为了账号安全,请及时绑定邮箱和手机立即绑定

请问try()括号里面的内容为什么不能放到外面?下面出错的地方是哪里呢?

请问try()括号里面的内容为什么不能放到外面?下面出错的地方是哪里呢?

qq_遁去的一_1 2022-02-17 11:11:09
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();}这段代码改为
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

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

查看完整回答
反对 回复 2022-02-21
?
呼唤远方

TA贡献1856条经验 获得超11个赞

因为有些代码在编译的时候就会检测会不会有明显的,也就是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();        }


查看完整回答
反对 回复 2022-02-21
  • 2 回答
  • 0 关注
  • 267 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信