当前位置: 首页 > news >正文

南通网站定制方案品牌网站建设的要点

南通网站定制方案,品牌网站建设的要点,网站设计培训学校有哪些,网站域名的用处Java 7的try-with-resources语句和与该语句一起使用的AutoCloseable类型的一个不错的功能是#xff0c;静态代码分析工具可以检测到资源泄漏。 例如#xff0c;Eclipse#xff1a; 具有以上配置并尝试运行以下程序时#xff0c;您将收到三个警告#xff1a; public stat… Java 7的try-with-resources语句和与该语句一起使用的AutoCloseable类型的一个不错的功能是静态代码分析工具可以检测到资源泄漏。 例如Eclipse 具有以上配置并尝试运行以下程序时您将收到三个警告 public static void main(String[] args) throws Exception {Connection c DriverManager.getConnection(jdbc:h2:~/test, sa, );Statement s c.createStatement();ResultSet r s.executeQuery(SELECT 1 1);r.next();System.out.println(r.getInt(1)); } 输出是琐碎的 2 警告会在所有c s和r上发出。 一种快速的解决方案不要这样做是使用Eclipse特定的SuppressWarnings参数抑制警告 SuppressWarnings(resource) public static void main(String[] args) throws Exception {... } 毕竟WeKnowWhatWeReDoing™这只是一个简单的示例对吧 错误 即使对于简单的示例至少在Java 7之后解决此问题的正确方法是使用轻松的try-with-resources语句。 public static void main(String[] args) throws Exception {try (Connection c DriverManager.getConnection(jdbc:h2:~/test, sa, );Statement s c.createStatement();ResultSet r s.executeQuery(SELECT 1 1)) {r.next();System.out.println(r.getInt(1));} } 实际上如果Eclipse可以自动修复此警告并将所有单独的语句包装在try-with-resources语句中那就太好了。 请支持此功能请求 Java 8处理了什么 在Java 8中 AutoCloseable上的合同已非常微妙地更改或直率地更改了具体取决于您的观点。 Java 7版本 在不再需要时必须关闭的资源。 注意单词must 。 Java 8版本 在关闭之前可以保存资源例如文件或套接字句柄的对象。 退出在资源规范头中已声明该对象的try-with-resources块时将自动调用AutoCloseable对象的close方法。 这种构造可确保及时释放避免资源耗尽异常和可能发生的错误。 API注意 即使并非所有子类或实例都拥有可释放的资源基类也有可能并且实际上是常见的。 对于必须完全通用的代码或者已知AutoCloseable实例需要释放资源的代码建议使用try-with-resources构造。 但是当使用诸如Stream的功能同时支持基于I / O和基于非I / O的形式时使用非基于I / O的形式时通常不需要使用资源尝试模块。 简而言之从Java 8开始 AutoCloseable更具暗示性表明您可能正在使用需要关闭的资源但这并非一定如此。 这类似于Iterable契约后者没有说明您只能对Iterable进行一次还是多次迭代但是它强加了foreach循环所需的契约。 我们什么时候拥有“可选的可关闭”资源 以jOOQ为例。 与JDBC不同jOOQ 查询 在jOOQ 3.7中被设置为AutoCloseable 可能表示资源也可能不表示资源这取决于您如何执行。 默认情况下它不是资源 try (Connection c DriverManager.getConnection(jdbc:h2:~/test, sa, )) {// No new resources created here:ResultQueryRecord query DSL.using(c).resultQuery(SELECT 1 1);// Resources created and closed immediatelySystem.out.println(query.fetch()); } 输出再次是 ---- | 2| ---- | 2| ---- 但是现在我们再次在query变量上出现了Eclipse警告说有一个资源需要关闭即使通过这种方式使用jOOQ我们知道事实并非如此。 上面的代码中唯一的资源是JDBC Connection 并且已正确处理。 jOOQ内部的jOOQ PreparedStatement和ResultSet已完全处理并急切地关闭了。 然后为什么要首先实现AutoCloseable jOOQ与JDBC的默认行为相反。 在JDBC中默认情况下所有工作都是延迟进行的并且必须显式关闭资源。 在jOOQ中默认情况下会急切地完成所有工作并且可以有选择地使资源保持活动状态。 例如以下代码将保持打开的PreparedStatement和ResultSet try (Connection c DriverManager.getConnection(jdbc:h2:~/test, sa, );// We keep the statement open in the ResultQueryResultQueryRecord query DSL.using(c).resultQuery(SELECT 1 1).keepStatement(true)) {// We keep the ResultSet open in the Cursortry (CursorRecord cursor query.fetchLazy()) {System.out.println(cursor.fetchOne());} } 在此版本中我们在Eclipse中不再有任何警告但是上述版本实际上是使用jOOQ API时的例外。 Java 8的Stream API也是如此。 有趣的是Eclipse在这里不发出任何警告 StreamInteger stream Arrays.asList(1, 2, 3).stream(); stream.forEach(System.out::println);结论 首先资源泄漏检测似乎是一个不错的IDE /编译器功能。 但是避免误报很难。 具体而言因为Java 8改变了合同AutoCloseable 实现者被允许执行AutoCloseable为一种方便的契约而不是作为一种资源存在必须关闭的清晰指示符。 这使IDE很难甚至不是不可能检测第三方合同非JDK API的资源泄漏而这些合同通常并不为人所知。 与静态代码分析工具一样该解决方案通常只是关闭潜在的资源泄漏检测 有关更多的见解另请参见Stuart Marks的Stack Overflow答案该链接与EG关于lambda-dev的讨论相关联 翻译自: https://www.javacodegeeks.com/2015/12/subtle-autocloseable-contract-change-java-7-java-8.html
http://www.pierceye.com/news/968026/

相关文章:

  • 有专门做网站的吗网站后台发表文章
  • 秦皇岛汽车网站制作广州网站建设 知名
  • 自己建网站数据怎么做惠州网站制作培训
  • 南山做网站的wordpress自助友链
  • php企业网站源码软件工程师发展前景
  • 如何从建设局网站上更换职称人员哪个网站可以免费做国外网站
  • 情侣博客网站模板下载学校网站建设调查报告
  • 平台网站开发是什么意思全屏的网站
  • 素材图库网站源码网站建设及推广培训班
  • 英国电商网站jsp旅游网站开发系统
  • 机关网站建设引导语开发一个企业网站需要多少钱
  • 徐汇网站推广挣钱最快的小游戏
  • 手机网站开发的目的在线免费看影视网站
  • 湖州网站设计wordpress自动删除p标签
  • 昆明几大网站学生网站建设实训总结
  • 丽江手机网站建设建设公司起名大全
  • seo网站分析工具wordpress的安装包
  • 北京网站建设报价表徐州专业做网站
  • 怎样做网站卖网站国内免费开源crm
  • wordpress多语言网站济宁住房和城乡建设厅网站
  • 免费crm网站下载网站建设 繁体
  • 东莞企业官方网站建设网站建设对产品推销作用大吗
  • php网站路径问题站长工具权重查询
  • 箱包官方网站模板摄影后期教程网站
  • iis 手机网站同域名网站改版需要把之前网站里的文章都拷贝过来吗?
  • 网站是专门对生活中的一些所谓常识做辟谣的商标设计网站排行
  • seo网站设计营销工具抽奖网站插件
  • 家装设计网站大全网站建设用哪个好
  • 青海企业网站建设企业建设网
  • 电子商务网站环境建设怎么劝客户做网站