工作中遇到关于流的问题以及java1.7中的 try-with-resources的

    今天下午正敲着代码,被老大交过去让看一个代码,要我讲出来问题在哪。话不多说直接上图

工作中遇到关于流的问题以及java1.7中的 try-with-resources的

看了半天也看不出问题在哪儿,最主要是代码都看不明白。

最后一脸懵逼的问老大:老大说抛出异常关闭流,那成功呢?

最后:需要在try catch后加finally中执行流关闭。     原谅我最基础的都忘完了。哎。

ps:还有一些if(myProxy !=null){myProxy.close()} 直接去掉,在定义的时候就=null。所以没用。另外myProxy.getConnState()也是错误的,对象没有实例化是不能调用其方法的。但是程序中没有报错,由于前面||已经满足。

我把这张图发一个群里,有人问我java用的什么版本,说1.7的版本加了

try-with-resources自动关闭资源。然后我就顺便研究了一下这个新的特性。


使用try-with-resources, 可以自动关闭实现了AutoCloseable或者Closeable接口的资源。

在出现try-with-resources之前可以使用finally子句来确保资源被关闭

可以在一个try-with-resources语句中声明多个资源,这些资源将会以声明的顺序相反之顺序关闭, 比如下面的方法。

注意:一个try-with-resources语句也能够有catch和finally子句。catch和finally子句将会在try-with-resources子句中打开的资源

被关闭之后得到调用。

注意:前面提到,如果try-with-resources语句中打开资源的Close方法和try代码块中都抛出了异常,Close 方法抛出的异常被抑制,try代码块中的异常会被抛出。

Java7之后,可以使用Throwable.getSuppressed方法获得被抑制的异常。

以下是我做的代码测试:

工作中遇到关于流的问题以及java1.7中的 try-with-resources的

其中1和2资源需要关闭,资源1关闭时没有报错,所以输出a.closeing... 资源2关闭的时候报错了,但是异常先抛出的为3的自定义异常,而资源2在其后面。最后:try和close同时有异常时捕获的为try里面的异常,而close被抑制,日志中suppressd中有close的异常信息。至于Throwable.getSuppressed()方法获取到的异常数组的length一直都是0,未获取到抑制的colse异常。所以有待学习。

有朋友知道可以评论告诉我,今天刚刚接触。

其中http://blog.****.net/fw0124/article/details/49946975  有详细介绍