工作中遇到关于流的问题以及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方法获得被抑制的异常。
以下是我做的代码测试:
其中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 有详细介绍