当前位置: 首页 > 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.zqtcl.cn/news/968026/

相关文章:

  • 怎么用目录建wordpress站点怎样开发wordpress主题
  • 免费网站排名优化在线南通科技网站建设
  • 辽宁网站建设招标怎么建设像天猫的网站
  • 新闻类网站排版网站建设东莞正规网站建设
  • 网站开发亿玛酷出名5重庆公司买深圳社保
  • 网站建设开发报价单苏州网上注册公司流程
  • 网站开发包含河南洛阳网络公司
  • 个人网站建设方案书使用几号纸网站出租目录做菠菜 有什么坏处
  • 烟台做网站案例产品设计欣赏
  • 长安网站建设多少钱室内设计学校培训的
  • 驻马店北京网站建设怎么用网站做转换服务器
  • 成都网站建设cdxwcx百度搜索关键词排名优化推广
  • 框架网站怎么做o2o是什么意思的
  • 山东响应式网站网页设计素材电影
  • 新都区网站建设网站设计公司排行榜
  • 网站建设需求分析调研表建筑品牌网站
  • html5商城网站如何查询网站建设者
  • 做重视频网站教育网站改版方案
  • 小网站谁有网站上线后做什么
  • 松江网站建设培训手机网站你们
  • 荆州网站建设 众火网北京小客车指标调控管理信息系统
  • 域名和网站一样吗自己开发小程序要多少钱
  • 咨询公司网站源码手机优化软件哪个好用
  • 行业网站模板小型影视网站源码
  • 湖北网站建站系统哪家好微信小程序怎么注销账号
  • 温州网站推广公司沈阳网站建设服务电话
  • 2019年的阜南县建设修路网站洛阳哪里有做网站的
  • 家里电脑可以做网站服务器吗佛山网络公司哪家最好
  • 做网站属于无形资产还是费用网站制作二维码
  • ps为什么做不了视频网站最近做网站开发有前途没