译注:但见新人笑,哪闻旧人哭。在大家都在兴致勃勃的讨论Java 8的时候,那个早被遗忘的Java 7,或许你从来都没有记得它的好。

Java 8的发布也有一个月了,我相信现在大家都在探索JDK 8中的新特性。但是,在你彻底开始钻研Java 8之前,最好先来回顾下Java 7有哪些新特性。如果你还记得的话,Java 6是没有增加任何特性的,只是JVM的一些改动以及性能的提升,不过JDK 7倒是增加了不少有助于提升开发效率的很给力的特性。我现在写这篇文章的目的是什么呢?为什么别人都在讨论Java 8的时候,我却还在聊Java1.7的事?因为我认为并不是所有的Java开发人员都很清楚JDK 7中的改动,还有什么时候比新版本发布的时候更适合介绍上一版本的特性的呢?我还很少看见有开发人员在代码中使用自动资源管理(ARM),尽管IDE的辅助工具都已经支持这个特性了。不过确实看到有人在用string的switch功能以及<>在做类型推导,另外,也很少有人知道fork-join框架,或者在一个catch块里捕获多个异常,或者在数值型字面量中使用下划线。因此我借这个机会来写一篇简短的摘要,回顾一下这些能方便我们日常开发工作的改动。NIO以及新的文件接口,还有很多API层面的改动也同样值得关注。我相信和Java 8的lambda表达式结合起来后,写出来的代码肯定会更加简洁。

类型推导
JDK 1.7引入一个新的操作符<>,也被称作钻石操作符,它使得构造方法也可以进行类型推导 。在Java 7之前,类型推导只对方法可用,正如Joshua Bloch在Effiective Java第二版中所预言 的那样,现在终于在构造方法中实现了。在这之前,你得在对象创建表达式的左右两边同时指定类型,现在你只需要在左边指定就可以了,就像下面这样。

JDK 7之前
Map<String, List> employeeRecords = new HashMap<String, List>();
List primes = new ArrayList();
JDK 7
Map<String, List> employeeRecords = new HashMap<>();
List primes = new ArrayList<>();
在Java 7中可以少敲些代码了,尤其是在使用集合的时候,因为那里大量用到了泛型。点击这里了解更多关于Java钻石操作符的信息。(译注:原文没提供链接啊)

在switch中支持String
在JDK 7之前 ,只有整型才能用作switch-case语句的选择因子。在JDK7中,你可以将String用作选择因子了。比如:

String state = “NEW”;

switch (day) {
case “NEW”: System.out.println(“Order is in NEW state”); break;
case “CANCELED”: System.out.println(“Order is Cancelled”); break;
case “REPLACE”: System.out.println(“Order is replaced successfully”); break;
case “FILLED”: System.out.println(“Order is filled”); break;
default: System.out.println(“Invalid”);
}
比较的时候会用到String的equals和hashCode()方法,因此这个比较是大小写敏感的。在switch中使用String的好处是,和直接用if-else相比 ,编译器可以生成更高效的代码。更详细的说明请点击这里。

自动资源管理(Automatic Resource Management)
在JDK 7之前,我们需要使用一个finally块,来确保资源确实被释放掉,不管try块是完成了还是中断了。比如说读取文件或者输入流的时候,我们需要在finally块中关闭它们,这样会导致很多的样板代码,就像下面这样:

public static void main(String args[]) {
FileInputStream fin = null;
BufferedReader br = null;
try {
fin = new FileInputStream(“info.xml”);
br = new BufferedReader(new InputStreamReader(fin));
if (br.ready()) {
String line1 = br.readLine();
09
System.out.println(line1);
}
} catch (FileNotFoundException ex) {
System.out.println(“Info.xml is not found”);
} catch (IOException ex) {
System.out.println(“Can’t read the file”);
} finally {
try {
if (fin != null) fin.close();
if (br != null) br.close();
} catch (IOException ie) {
System.out.println(“Failed to close files”);
}
}
}
看下这段代码 ,是不是很多样板代码?

而在Java 7里面,你可以使用try-with-resource的特性来自动关闭资源,只要是实现了AutoClosable和Cloaeable接口的都可以,Stream, File, Socket,数据库连接等都已经实现了。JDK 7引入了try-with-resource语句,来确保每个资源在语句结束后都会调用AutoCLosable接口的close()方法进行关闭。下面是Java 7中的一段示例代码,它看起来可是简洁多了:

public static void main(String args[]) {
try (FileInputStream fin = new FileInputStream(“info.xml”);
BufferedReader br = new BufferedReader(new InputStreamReader(fin))

Java 8?还记得那年大明湖畔的Java 7吗?相关推荐

  1. 写了这么久Java项目,是否还记得你的第一行Java代码

    前言 个人情况 首先介绍一下本人的情况,我来自于一个双非渣渣二本学院,目前处于大四阶段,由于在小学的时候就开始接触了电脑,一直以来也对IT的各方面有着浓厚的兴趣,所以在高考结束填写志愿书的时候,就毅然 ...

  2. 你还记得当年上课天天玩 JAVA游戏吗

    回头再玩玩以前的游戏,发现意外的好玩唉,这三个我玩了好多次,我个人觉得当年的JAVA游戏中,有些RPG游戏比某些国产大IP的RPG游戏还要好玩,当年那种手机出很多Java 大作, 包括红警也有, 七夜 ...

  3. Java 18 还未用上,最新Java 19 则出来了

    前言 铁打的 Java,流水的版本,而不久前,Java 18 才正式发布还没用呢,这遵循 Oracle 六个月发一版本的频率,Java 19将在今年 9 月出炉但是没想到.这不还没等众多开发者用上 J ...

  4. java多线程做一件事_关于Java的十件事

    java多线程做一件事 那么,您从一开始就一直在使用Java? 还记得那些被称为" Oak"的日子,OO仍然是热门话题,C ++人士认为Java没有机会,Applet还是一件事吗? ...

  5. 只不过是R.java文件的特性-----出错信息:R.java was modified manually! Reverting to generated version!...

    出错信息:R.java was modified manually! Reverting to generated version! 出错原因:今天在res下建立了一个drawable的文件夹存放图片 ...

  6. java最早的手机网游_还记得你们玩过的最早的手机网游是什么吗?

    不知你们是否记得一个叫做<冒泡社区>的手游平台,在那个传统的功能机时代,冒泡社区可以算是国内第一的手游社区平台了,还记得初一的时候,我爸买了个杂牌子手机,当前用里面的"JAVA& ...

  7. 少 年 不 惧 岁 月 长——你是否还会记得那年少时的梦呢?

    那些在深夜里睡不着的日子 那些面对深渊想要逃跑的瞬间 在日后看来都是非常珍贵的时刻 他让我们更加诚实的面对自己 只有认识他,接受他 我们才可能真正的超越他. 每一个人都必定出发于他的少年时 只是很多年 ...

  8. 那些年的java游戏_那些年我们曾经玩过的游戏,你还记得几个

    标题:那些年我们曾经玩过的游戏,你还记得几个 随着时间长河的推进,我们已经长大了.你还记得我们那些年一起玩过的游戏么? 弹弓 一般用树枝做弓架,也可以用旱伞的伞骨做弹弓架.要买弹力很大的像皮筋,就和那 ...

  9. Java中开根号,你还记得吗

    目录 前言 一.了解根号运算 二.Java开根号 1.Math.sqrt()开平方根 2.Math.pow()开根号 3.牛顿迭代法来近似求解平方根 总结 前言 开根号相信大家都不陌生,这是一种数学运 ...

  10. java swing还有人用吗_Java不是自动管理内存吗,怎么还有内存泄漏?

    最近最我的机顶盒里有个Android应用老提示应用已停止运行,我查看Log后发现是Java堆内存溢出然后挂掉了.Java不是自动管理内存吗,怎么还会有内存泄漏,是Java虚拟机的垃圾回收机制有问题吗? ...

最新文章

  1. Linux中如何配置IP
  2. 基于HTML5实现的(本地存储)多标签页面元素的复制粘贴
  3. 047_CSS3多列
  4. Mac 环境下连接多个git — ssh方式
  5. Java实战系列之关于双十一秒杀架构模型的一点思考
  6. 转:Linux设备驱动开发(1):内核基础概念
  7. 设置builder.max_workspace_size的意义
  8. Leetcode之插入区间
  9. java中常用的类——Object类
  10. 【手写数字识别】基于matlab GUI BP神经网络手写数字识别【含Matlab源码 1118期】
  11. 达观数据助力浙江大华构建企业级知识搜索共享平台,盘活沉淀数据
  12. 第22节 NAT——实现公私有IP地址转换
  13. 03.先了解一些python的基础语法
  14. 谷歌浏览器 Google Chrome v74.0.3729.131 正式版
  15. 企业承担社会责任的必要性
  16. L0范式、L1范式、L2范式解释通俗版
  17. python做工资条_4种工资条制作方法,总有一款适合你
  18. 案例:缺陷状态数据分析
  19. 激活锁忘记了id和密码怎么办?记住这几步,很有用!
  20. java自定义注解枚举_java_自定义注解

热门文章

  1. swing-组件Collapse折叠面板2
  2. Web开发——Photoshop(PSD格式截取)
  3. python之Continuity循环
  4. impress.js css模板,使用impress.js制作幻灯片
  5. oj美元和人民币java_【牛客网OJ题】:人民币转换
  6. 前端开发工程师需要的技能
  7. django memery cache
  8. axios请求跨域前端解决_10、axios请求以及跨域问题,前端解决方法。11、后端-nginx解决方法...
  9. 如何在线下载哔哩哔哩上的视频
  10. matlab仓库选址,物流中心选址matlab