Java7 –回顾

我开始写博客文章,介绍即将发布的Java8版本中的新增功能 ,并认为我将从快速回顾一下Java7带给我们的内容开始。

Java7于2011年7月发布,被描述为“更具进化性而非革命性”。

“有一些重大的改进,但是并没有真正令人惊叹或突破性的功能。” – Oracle首席Java架构师Mark Reinhold

例如,它不包含被大肆宣传的lambda表达式。 尽管如此,它确实为Java语言带来了许多其他巧妙的补充。 您可以在http://docs.oracle.com/javase/7/docs/上找到更多内容,或者继续阅读我的摘要。

Java7的重点包括:

  • 项目硬币
    • 开关中的弦
    • 资源试一试
    • 多发球和更精确的重新抛出
    • 钻石操作员
    • 二进制整数文字
    • 数字文字下划线
  • 新的输入/输出功能
  • Fork&Join /并发实用程序

项目币

项目代币是“零钱”的双关语,包含一些次要但有用的功能,包括:

开关中的弦

在Java 7之前的版本中,switch语句适用于原始类型或枚举类型。 Java 7引入了我们可以在Switch语句中使用的另一种类型: String类型。 假设我们有一个根据字符串状态字段处理交易的要求。 到目前为止,我们以前都是通过使用if-else语句来实现的。

private void processTrade_UsingIfs(Trade t) {String status = t.getStatus();if (status.equalsIgnoreCase("New")) {setupNewTrade(t);} else if (status.equalsIgnoreCase("Execute")) {executeTrade(t);} else if (status.equalsIgnoreCase("Pending")) {processTrade(t);}}

在Java7中,我们可以使用switch语句执行相同的操作:

public void processTrade_UsingSwitch(Trade t) {String status = t.getStatus();switch (status) {case "New":setupNewTrade(t);break;case "Execute":executeTrade(t);break;case "Pending":processTrade(t);break;default:break;}}

尝试语句中的自动资源管理

现在,您可以在try块中声明一个将自动关闭的资源。 例如以前必须要做的事:

public void oldTry() {FileReader fileReader = null;BufferedReader inputStream = null;try {fileReader = new FileReader("java7.txt");inputStream = new BufferedReader(fileReader);String line = inputStream.readLine();System.out.println(line);} catch (IOException e) {//typically log or rethrow} finally {//all resources need to be manually closedtry {fileReader.close();inputStream.close();} catch (IOException e) {//typically ignore}}}

但是,现在在Java 7中,try-with-resources语句可确保在语句末尾关闭每个资源。

public void newTry() {try (FileReader fileReader = new FileReader("java7.txt");BufferedReader inputStream = new BufferedReader(fileReader)) {String line = inputStream.readLine();System.out.println(line);            } catch (IOException e) {//typically log or rethrow}//no finally block to close resources required}

资源的声明出现在try关键字之后的括号内。

任何实现java.lang.AutoCloseable的对象(包括所有实现java.io.Closeable的对象)都可以用作资源。 无论try语句正常完成还是突然完成,资源都将关闭

多发球和更精确的重新抛出

多抓

public void oldMultiCatch() {try {methodThatThrowsThreeExceptions();} catch (ExceptionOne e) {// log and deal with ExceptionOne} catch (ExceptionTwo e) {// log and deal with ExceptionTwo} catch (ExceptionThree e) {// log and deal with ExceptionThree}}public void newMultiCatch() {try {methodThatThrowsThreeExceptions();} catch (ExceptionOne | ExceptionTwo | ExceptionThree e) {// log and deal with all Exceptions}}public void newMultiMultiCatch() {try {methodThatThrowsThreeExceptions();} catch (ExceptionOne e) {// log and deal with ExceptionOne} catch (ExceptionTwo | ExceptionThree e) {// log and deal with ExceptionTwo and ExceptionThree}}

更精确的重新抛出

Java SE 7编译器对重新抛出的异常执行更精确的分析,使您可以在方法声明的throws子句中指定比在方法主体的catch / throws中使用的更特定的异常类型。

以前,我们必须做这样的事情:

static class FirstException extends Exception { }static class SecondException extends Exception { }public void rethrowException_PreJava7(String exceptionName) throws Exception {try {if (exceptionName.equals("First")) {throw new FirstException();} else {throw new SecondException();}} catch (Exception e) {throw e;}}

注意我们如何在throws子句中声明更通用的Exception。 在Java7中,我们可以将其更改为:

public void rethrowException_PostJava7(String exceptionName) throws FirstException, SecondException {try {if (exceptionName.equals("First")) {throw new FirstException();} else {throw new SecondException();}} catch (Exception e) {throw e;}}

钻石操作员

Diamond运算符简化了涉及泛型的构造函数调用。 假设您要创建一个字符串ID映射来交易对象。 原来的方法是:

Map<String, Trade> trades = new TreeMap<String, Trade>();

但是右侧似乎有点多余。 编译器可以通过查看左侧的声明来推断类型吗? 在Java7中可以,代码变为:

Map<String, Trade> trades = new TreeMap<>();

这是一个不错的但次要的方便–使用Guava库已经可以很好地处理它。 例如:

Map<String, Trade> trades = Maps.newTreeMap();

二进制整数文字

如果您在代码中处理二进制文件,则很有用。 例如,您现在可以执行以下操作:

int three = 0b101;

请注意0​​b(或0B)前缀,以将数字标识为二进制文字。

允许在数字文字中使用下划线

我也不认为这个意义太大,但是在某些情况下可能有用。 例如:

long creditCardNumber = 1234_5678_9012_3456L;

Fork&Join /并发实用程序(JSR 166)

Fork / Join框架专注于使用计算机中可用的所有处理资源来提高应用程序的性能。 它是为可以递归分解为较小部分的工作而设计的(“分而治之”算法)。

摘要:

  • Fork / Join框架:允许更轻松的Java并行编程
  • 针对多处理器系统(当今几乎所有硬件)

在以下情况下使用:

  • 一批工作可以分解为较小的递归调用。
  • 还使用工作窃取算法,其中无工作的线程可以从其他繁忙的线程中窃取可用工作

道格·李(Doug Lea)撰写:

  • oswego软件包的创建者(成为java.util.concurrent)
  • 实践中Java并发的贡献者

历史简介

Java 1.4及更低版本:开发并发类非常困难-提供的低级并发原语( synchronizedvolatilewait()notify()notifyAll() )难以正确使用,并且使用这些功能的错误难以实现检测和调试

Java 5:包括新的并发实用程序

任务计划框架– Executor框架

执行人:执行已提交的对象Runnable任务。

ExecutorService:一种Executor ,提供提供产生Future方法,该Future表示(尚未完成)异步计算的结果。

Java 7:ForkJoinPool:一种新型的ExecutorService, which使您可以更轻松地分解要同时执行的处理,并递归executes ForkJoinTasks:类似于线程的实体,其重量比普通线程轻得多。 大量的任务和子任务可能由ForkJoinPool中的少量实际线程托管。

新的ForkJoinPool采用分而治之算法。

伪代码(摘自Doug Lea关于该主题的论文):

Result doWork(Work work) {if (work is small) {process the work}else {split up workinvoke framework to solve both parts}
}

摘要

  • 很高兴看到Java在并发空间中的持续发展以我们在Java 5中获得的所有好处为基础
  • 该框架的潜在用途是有限的,并且需要一个相当狭窄的问题范围。

新的输入/输出功能

Java7引入了一个新的文件I / O库,以增强平台独立性并增加对元数据和符号链接的支持。 新软件包是java.nio.file和java.nio.file.attribute。 主要的新类是:

  • 路径 :“文件系统中路径的程序表示”。 这可能是开发人员最常使用的新类(接口)。 路径引用的文件不需要存在。 出于所有实际目的,您可以考虑用java替换java.io.File。 路径 它包括各种可用于获取有关路径的信息的方法,包括创建,转换和比较路径。
  • Files :Files类为文件相关的操作提供了大量的静态方法,例如读取,写入和操作文件和目录。 Files方法对Path对象的实例起作用。

而已! Java7给我们的总结。 请参阅我的下一篇博客文章,以回顾Java8中即将推出的一些功能。

参考: Java7 – Shaun Abram博客博客中我们的JCG合作伙伴 Shaun Abram的回顾 。

翻译自: https://www.javacodegeeks.com/2013/10/java7-a-look-back.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

皖西学院计算机证书,下半年皖西学院计算机等级考试报名时间

根据《皖西学院2017下半年全国计算机等级考试报名通知》得知&#xff0c;2017下半年全国计算机等级考试报名时间7月3日上午09:00分至7月18日17点30分。下面yjbys小编就为大家分享一篇皖西学院计算机等级考试报名具体内容&#xff0c;希望大家认真阅读!一、报名及网上缴费时间&a…

RabbitMQ安装以及集群部署

本次记录安装RabbitMQ的过程&#xff0c;只针对MAC下单机版安装、单机集群安装方法以及配置haproxy负载均衡。 RabbitMQ单机版本安装RabbitMQ单机集群安装方法&#xff08;适合开发练习&#xff09;RabbitMQ配置haproxy负载均衡RabbitMQ集群测试&#xff08;待续&#xff09;参…

前端通过spark-md5.js计算本地文件md5

背景&#xff1a;说到本人第一次使用spark-md5.js还是差不多一年以前的时候了&#xff0c;当时后台老大说要搞一个文件分片上传的功能。我当时就心想&#xff1a;what&#xff1f;啥是文件分片上传&#xff0c;完全没听过好吗&#xff1f;至于我当时内心那个慌就不多描述了&…

r 保留之前曲线_生存曲线居然能够批量绘制了

生信分析第三步&#xff1a;生存曲线批量绘制各位解螺旋的小伙伴大家好&#xff0c;我是先锋宇&#xff0c;欢迎大家来到每周日的先锋宇专栏&#xff0c;经过前两期推文的学习&#xff0c;很多小伙伴都私信我说从先锋宇助教的专栏很接地气&#xff0c;自己能够开始慢慢处理数据…

关于窗口的一些小脚本

一般窗口分为两种情况 &#xff1a; 1、window.open 浏览器样式窗口 ⑴ 属性&#xff1a;window.open(index.html, newpage, height800, width60, top20, left50, toolbarno, menubarno, scrollbarsno, resizableno, locationno, statusno) 参数&#xff1a;window.open 弹出新…

基于vue自动化表单实践

背景 B端系统表单较多&#xff0c;且表单可能含有较多字段字段较多的表单带来了大片HTML代码在大片HTML中&#xff0c;混杂着参数绑定、事件处理等逻辑&#xff0c;不利于维护技术栈 Vue&#xff0c;Element(默认表单布局)适合中后台项目快速开发 目标 通过json配置快速生成表单…

天津科技大学计算机学院复试分数线,2021天津科技大学研究生复试分数线

2021天津科技大学研究生复试分数线已经公布&#xff0c;包含学术学位、专业学位、专项计划复试分数线&#xff0c;供大家参考&#xff0c;如意了在此祝广大考研学子都能顺利上岸。一、2021年天津科技大学研究生分数线1&#xff0e;专业分数线各学院严格执行《2021年全国硕士研究…

使用Eclipse Hibernate插件逐步为POJO域Java类和hbm自动生成代码

概述&#xff1a; 在本教程中&#xff0c;我们将使用Eclipse Hibernate工具自动生成域对象和相应的hbm xml文件。 如果您正在处理大型或中型项目&#xff0c;并且开始时有超过5个以上的表&#xff0c;则可能会发现此插件是自动生成映射域对象java文件和相应* .hbm.xml的绝佳工具…

idea本地跑如何看gc日志_线上故障如何快速排查?来看这套技巧大全

简介&#xff1a;有哪些常见的线上故障&#xff1f;如何快速定位问题&#xff1f;本文详细总结工作中的经验&#xff0c;从服务器、Java应用、数据库、Redis、网络和业务六个层面分享线上故障排查的思路和技巧。较长&#xff0c;同学们可收藏后再看。前言线上定位问题时&#x…

【第七次JAVA课,java语法基础】课件总结

没上课&#xff0c;不写总结&#xff01; 空着&#xff0c;会专门写篇总结java的io和nio的随笔。 转载于:https://www.cnblogs.com/limitCM/p/9997971.html

计算机技术与分析化学论文,分析化学(论文).doc

分析化学(论文)分析化学在生活中的应用化学化工学院 胡成摘 要&#xff1a;通过简单介绍有关分析化学在食品安全、药品检测、化妆品研究和环境监测的应用&#xff0c;阐明分析化学在人类生活中的重要作用。关 键 词&#xff1a;分析化学 食品安全 药品检测 化妆品研究 环境监测…

从零打造在线版H5页面生成器

想必你一定使用过易企秀或其它微场景生成工具制作过炫酷的h5页面&#xff0c;除了感叹其神奇之处有没有想过其实现方式呢&#xff1f;从设计者的角度来看待问题&#xff0c;会有不一样的收获&#xff0c;本文将从零开始&#xff0c;使用node技术来设计实现一款精简版的易企秀 G…

使用Struts2,Hibernate和MySQL BLOB开发个人迷你相册应用程序–第1部分

概述&#xff1a; 在本研讨会中&#xff0c;我们将开发一个Web应用程序&#xff0c;可用于创建漂亮的照片库。 您可以将其托管在Web服务器中&#xff0c;也可以在自己的PC中使用以维护和管理照片集。 使用本教程&#xff0c;您将能够了解与Struts2和Hibernate相关的以下重要内容…

Activity并行网关和排他网关

说一说activiti中的排他网关和并行网关 activiti工作流中我们经常用到的网关有两种&#xff1a; 1. Exclusive Gateway 排他网关 排他网关.png 排他网关&#xff08;也叫异或&#xff08;XOR&#xff09;网关&#xff0c;或更技术性的叫法 基于数据的排他网关&#xff09;&…

ValueError: too many values to unpack

Error msg: 执行: python manage,py makemigrations 报错:Value: too many values to unpack 问题: django第一次数据库迁移之后, apps中的model位置改变了, 导致之前生成的迁移文件检测不到原来的位置 解决: 删除所有的迁移文件重新迁移, 或者将之前的迁移文件的路径修改正确 …

安徽省计算机二级考试vfp试题,安徽省计算机二级VFP考试理论模拟试题附答案

《安徽省计算机二级VFP考试理论模拟试题附答案》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《安徽省计算机二级VFP考试理论模拟试题附答案(19页珍藏版)》请在人人文库网上搜索。1、一、单项选择题(每题1分&#xff0c;共40分) 1. 计算机能够自动工作&#xff0c;主…

你不懂js系列学习笔记-异步与性能- 02

第二章&#xff1a;回调 原文&#xff1a;You-Dont-Know-JS 主要理解 “回调地狱&#xff08;callback hell&#xff09;”痛苦的点到底是哪&#xff0c;以及尝试拯救回调。 1. 首先从实际生活中模拟 我相信大多数读者都曾经听某个人说过&#xff08;甚至你自己就曾这么说&…

c# 计算空格宽度像素_关于C#中换算像素和毫米的说明

在C#中是以像素作为尺寸单位的&#xff0c;像素是一种相对的尺寸概念&#xff0c;与毫米的转换跟当前显示器的分辨率有关&#xff0c;在不同分辨率下转换的系数也不同。借助C#中的GDI可以实现像素与毫米的换算&#xff1a;一、根据Win32 API定义函数获取显示器设备信息&#xf…

使用Apache Commons Net SMTP以Java(和Android)发送邮件:STARTTLS,SSL

最近我正在做一个Android实验&#xff0c;我想使用SMTP服务器通过android应用程序通过身份验证和加密来发送电子邮件。 好吧&#xff0c; 我发现Android上的javax.mail并不是一个很好的选择 &#xff0c;因为它取决于awt类&#xff08;我猜是传统&#xff09;&#xff1b; 有些…

列名无效

数据库增加新&#xff0c;视图没有更新转载于:https://www.cnblogs.com/Neil-Peng/p/9283355.html