范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

tryresources优于tryfinally

  最近在看《Effective Java》看到第九点,try-with-resources 优先于try-finally。为了理解更加透彻,个人重新分析了一下,内容如下。
  在java开发中,一些网络链接或者是文件资源都需要程序员去手动调用close方法关闭,比如InputStream、OutputStream和java.sql.Connection。如果忘关了就可能造成严重的性能后果。而关闭的方法有很多种。比如finalizer、try-catch-finally、try-with-resources等等。
  finalizer机制可以关闭,但是其执行性不可预测,还有可能造成内存泄漏,所以一般不使用,虽然java9还提出了cleaner机制代替了finalizer机制,但是其执行依然不可预测,因此选择就落在了try-catch-finally和try-with-resources之间。 我们先看看try-catch-finally的在不同场景下的执行顺序。
  1:代码没有异常
  执行顺序:try执行完整->catch不执行->finally执行
  2:代码有异常且catch进行捕获
  执行顺序:try执行部分->跳转catch捕获处理->finally执行
  3:代码有异常且catch不捕获:这种情况没有catch
  执行顺序:try执行部分->finally执行
  我们可以得出一个结论,不管有没有异常,如果有finally块,那么finally块代码一定是会被执行的。
  我们来看看Effective Java的案例 static String firstLineOfFile(String path) throws IOException {         BufferedReader reader = new BufferedReader(new FileReader(path));         try {             return reader.readLine();         } finally {             reader.close();         }     }
  关闭一个资源还好,但是如果再添加第二个资源,代码看起来就会一团糟了。  static void copy(String src, String desc) throws IOException {         InputStream in = new FileInputStream(src);         try {             OutputStream out = new FileOutputStream(desc);             byte[] bytes = new byte[1024];             int n;             try {                 while ((n = in.read(bytes)) != -1) {                     out.write(bytes, 0, n);                 }             } finally {                 out.close();             }         } finally {             in.close();         }     }
  如果再添加几个不同资源, 需要关闭的资源不仅种类多,而且数量也很多。代码就显得很臃肿,而且非常不优雅,还容易出现内存泄露的问题。
  当java7 引入try-with-resources语句时,所有这些问题一下子都全部解决了。要使用这个构造的资源,必须先实现AutoCloseable接口,其中包含了单个返回void的close方法。Java类库与第三方类库中的许多类和接口,现在都实现或扩展了AutoCloseable接口,如果编写了一个类,它代表的是必须被关闭的资源,那么这个类也应该实现AutoCloseable。
  以下就是使用try-with-resources的第一个范例。其中BufferedReader已经实现了AutoCloseable static String firstLineOfFile(String path) throws IOException {     try (BufferedReader br = new BufferedReader(new FileReader(path))){         return br.readLine();     } }
  以下就是使用ry-with-resources的第二个范例。InputStream 和 OutputStream已经实现了AutoCloseable static void copy(String src, String dst) throws IOException {     try (InputStream inputStream = new FileInputStream(src); OutputStream outputStream = new FileOutputStream(dst)){         byte[] buf = new byte[1024];         while (inputStream.read(buf) >= 0){             outputStream.write(buf,0,inputStream.read(buf));         }     } }
  使用try-with-resources不仅使代码变得更加简洁易懂,也更容易诊断,以firstLineOfFile方法为例,如果调用readLine和不可见的close方法都抛出异常,后一个异常就会被禁止,以保留第一个异常。但是我们实际上,这些异常我们都是想它们都打印出来,可以查看堆栈轨迹的。这个时候 我们可以通过getSUppressed方法还可以访问到它们,此方法也已经添加在Java7 的Throwable中了。
  经过上面例子,结论非常明显,在处理必须关闭的资源时,始终要优先考虑用try-with-resources,而不是try-finally,这样得到的代码将更加简洁,就能更轻松地正确编写代码,实践证明,这个用try-finally是不可能做到的。

苹果中国以旧换新计划跟随降价iPhoneXR价格4229起跳随着此次增值税减税政策的落地,苹果以旧换新计划的价格中国大陆地区也跟随调整,再加上中国市场的数轮降价下来,iPhone现在看上去似乎并不再像是一件奢侈品了。今天苹果中国上线了Giv拒绝996,中国程序员的呼声传到了国外面具戴太久就会长到脸上,再想摘下来,除非伤筋动骨扒皮。996,从来如此,便对么?996,一次文化概念的输出在中文互联网世界,因为一些众所周知却无法言说的问题,中国程序员与世界程序员曝日产CEO与戈恩内部信试图收购中国公司1,曝日产CEO与戈恩内部信试图收购中国公司并新增联盟伙伴据彭博社报道,日产汽车首席执行官西川广人(HirotoSaikawa)和前董事长戈恩(CarlosGhosn)去年曾考虑为麦德龙要退出中国?青岛麦德龙要闭店?官方回应来了请点青岛新闻网爱打折订阅哦!近日,据路透社报道,有知情人士透露,麦德龙已通过招标的方式开始出售其在中国的业务。如果消息属实,它将成为继去年12月份梅西百货后又一家退出中国市场的50重遇安卓叹苹果小米Mix2s的多月折腾本文作者Emalf前言重遇安卓最早接触的安卓手机是HTCHero,稍微弯曲的机身加上轨迹球和触摸屏对从Nokia的N82换过去的觉得非常新鲜有趣。回想这89年前的事情,貌似现在的手AppleCard外观无卡号3返现天天入帐当金融业积极发展科技,而科技业也力拼金融服务。苹果公司于春季发表会跨足信用卡产业,将在夏季于美国正式发行AppleCard,卡片外观并无卡号有效日期,更不收取年费海外手续费等费用,学编程没人带?推荐10个免费学编程的最佳网站给你学习编程是开启你的Web开发和移动应用开发职业生涯的一种绝佳方式。在这篇文章中,我们将分享10个有助你学编程的最佳网站。1。Codecademy它是学编程最流行的网站之一。事实上,新一代企业数字化架构下的工业互联网近年来,众多的工业互联网平台在市场上如雨后春笋般不断涌现。据统计,目前全球工业互联网平台数量已经超过150个。在中国,预计在近一两年内还会有更多的工业互联网平台出现。如此之多的平台沃尔玛一年260元无条件会费的山姆会员店,你会去吗?众所周知,沃尔玛,家乐福,麦德龙等世界知名的大型商超,一直是大学商学专业课本里少不了的学习案例,这些零售巨头的案例教育了一代又一代的大学生,已经很久没新亮点出现了。其中的沃尔玛更是微软Chromium内核的Edge浏览器,真是不胜唏嘘微软将Window10内置默认浏览器Edge内核换成与谷歌浏览器一样的Chromium内核。更让人唏嘘的是Chrome对很多前端开发者非常有用的F12开发者工具,也得到了Edge的28分钟卖出1个亿80后温州人携网红一姐赴美上市张大奕冯敏和阿里联合创始人蔡崇信等在一起(从左到右)。4月3日,如涵控股在美国纳斯达克交易所上市。对于喜欢在淘宝上买买买的年轻女性来说,张大奕大金左娇娇等网红的名字应该不陌生吧。而
跨境电商一片火热,亚马逊运营人才缺口巨大前些天,在一个群里看到了杭州区域重新规划的消息。因为我本人在杭州呆了很多年,对那个地方感情颇深。杭州区域重新规划其实一年多以前就完成了,将原来的大江东和下沙合并为新的钱塘区。新区如亚马逊代运营公司如何提升新店铺销量做亚马逊这么多年,经常会有品牌找我们代运营,这其中有不少人上来就问你们可以给我们保证多少销售额?这些人大多不太了解亚马逊,甚至不太了解电商。起初,扫地僧会一一解答这些问题,后来咨询2021年iPadPro与2020年2018年iPad相比Pro对比一年来,对于那些在家工作或学习的人来说,iPad变得比以往任何时候都重要。苹果公司(Apple)发布了最新一代的iPadPro系列产品。更新后的硬件包括11英寸和12。9英寸两种尺Mac运行缓慢吗?提升苹果电脑速度的几个小技巧众所周知,随着时间的流逝,包括Mac在内的所有计算机的速度都会降低。除了换电脑,还是有许多简单的调整可以提高计算机的性能并加快运行速度较慢的Mac,而且这些调整不会花费一分钱。1。带有TouchID的MagicKeyboard规格介绍除了新的24英寸iMac之外,Apple还推出了新键盘具有TouchID的MagicKeyboard。这项功能已经在Apple的笔记本电脑上使用了几年,但是这是第一次有可能使用外部macmini和imac对比及选购建议如果您正在寻找台式机Mac,那么在Apple系列中有两个显而易见的选择iMac和Macmini。在本文中,我们将比较它们的功能,规格和价格,并帮助您确定哪种是您的正确选择。比较iM网传iPhone13刘海真的缩小了iPhone12以来,一直就有传言声称Apple会缩小iPhone上的TrueDepthCamera缺口的尺寸。在之前就有流出一张iPhone13浏海变小的照片,现在又有谣传照流出工厂找亚马逊代运营公司,有多少是盈利的?真相很残酷你们做亚马逊的目的是什么?每次在回答亚马逊代运营相关问题之前,我都会跟工厂确认一边,你们做亚马逊的初衷是什么,希望品牌出海,还是拓展电商渠道,亦或是为了赚钱。以上3点,主要有一条做2021年亚马逊封店的原因,或不仅仅是因为刷单在文章开始前,还是想先回顾2021年上半年。亚马逊卖家的心情可谓是过山车一样,忽高忽下,是不是还来一波惊险刺激。从第一季度的新卖家疯狂涌向亚马逊跨境电商,亚马逊全球开店每个月新增几面对亚马逊封号,中国卖家应该如何破局?中国亚马逊卖家被疯狂封号,该怎么办?要解决这个问题,我们要先分析一下,中国亚马逊卖家被疯狂封号的具体原因,针对这个问题我们对症下药,再能将降低封号的概率,减少封号带来的损失。第一,找亚马逊代运营公司做了近半年,销售总额为何不到3万美金?前两天,有个企业老板跟我诉苦,称找了杭州某亚马逊代运营公司,做了近半年时间,总的销售额还不到3万美金,这种情况应该如何应对?对于这种情况,扫地僧不想多说怎么应对,更乐意跟大家分享一