文档章节

java7语言新特性

不迷失
 不迷失
发布于 2017/03/30 18:56
字数 1025
阅读 90
收藏 1

虽然现在都使用Java8了,但是Java7的新特性你是否都知道了呢?

1f2f7374e1990b4bb551fd141bc4a53d

1.自动资源管理(TWR)--try with resource

Java中某些资源是需要手动关闭的,如InputStream,Writes,Sockets,Sql classes等。这个新的语言特性允许try语句本身申请更多的资源,这些资源作用于try代码块,并自动关闭。

以前的写法:

BufferedReader br = new BufferedReader(new FileReader(path));
try {
        ​return br.readLine();
} finally {
        br.close();
} 

现在可以:(有点像C#)

try (BufferedReader br = new BufferedReader(new FileReader(path)) {
              return br.readLine();
    } 

try后面的括号中可以有多个资源

2.钻石语法

类型推断是一个特殊的烦恼,如下面的代码:

Map<String, List<String>> anagrams = new HashMap<String, List<String>>(); 

通过类型推断后变成:

Map<String, List<String>> anagrams = new HashMap<>();

注:这个<>被叫做diamond(钻石)运算符,Java 7后这个运算符从引用的声明中推断类型。

3.数字字面量下划线支持

很长的数字可读性不好,在Java 7中可以使用下划线分隔长int以及long了。如:

int one_million = 1_000_000;

这个跟int one_million=1000000;是一致的效果

4.switch中使用string

以前在switch中只能使用number或enum。现在可以使用string了

5.二进制字面量

由于继承C语言,Java代码在传统上迫使程序员只能使用十进制,八进制或十六进制来表示数(numbers)。

由于很少的域是以bit导向的,这种限制可能导致错误。你现在可以使用0b前缀创建二进制字面量:

int binary = 0b1001_1001; 

现在,可以使用二进制字面量这种表示方式,并且使用非常简短的代码,可将二进制字符转换为数据类型,如在byte或short,这对于编写网络协议的程序员来说很不错。

byte aByte = (byte)0b001;    
short aShort = (short)0b010;

6.改善后的异常处理

一个catch子句捕获多个异常

在Java7之前的异常处理语法中,一个catch子句只能捕获一类异常。

在要处理的异常种类很多时这种限制会很麻烦。每一种异常都需要添加一个catch子句,而且这些catch子句中的处理逻辑可能都是相同的,从而会造成代码重复。

虽然可以在catch子句中通过这些异常的基类来捕获所有的异常,比如使用Exception作为捕获的类型,但是这要求对这些不同的异常所做的处理是相同的。

另外也可能捕获到某些不应该被捕获的非受检查异常。而在某些情况下,代码重复是不可避免的。

比如某个方法可能抛出4种不同的异常,其中有2种异常使用相同的处理方式,另外2种异常的处理方式也相同,但是不同于前面的2种异常。这势必会在catch子句中包含重复的代码。

对于这种情况,Java7改进了catch子句的语法,允许在其中指定多种异常,每个异常类型之间使用“|”来分隔。如例:

try {
            //..............
} catch (ExceptionA | ExceptionB ab) { 
} catch (ExceptionC c) {    
}

异常重抛

在意外的异常处理中,经常有如下代码:

    try {
            //..............
        
        } catch (Exception c) {    
    ​    ​    ​throw c;
        }

这样你捕获的真实异常可能是IOException,然而你抛出的会是Exception,真正的异常类型丢失了,Java7中抛出的却会是真实的异常类型,这被称为异常重抛。为了能意识到这个作用,建议在过渡期添加一个final关键字,虽然不是必须的:

     try {
            //..............
        
        } catch (final Exception c) {    
            throw c;
        }

新的语言特性出现时,你应该立刻接受并拥抱它们!

@不迷失|知识改善生活

专注技术研究与视频教学,分享有价值的技术与经验,关注程序员的发展!

@不迷失技术博客

微信公众号:java技术(javajidi_com)

技术交流群:245130488

教学视频

QQ课堂

百度传课

© 著作权归作者所有

下一篇: 对象与类
不迷失
粉丝 2
博文 51
码字总数 49683
作品 0
广州
后端工程师
私信 提问
一起学Java7新功能扩展——深入历险分享(一)

特此声明:因网友疑问,这里声明一个重要的安全,就是大家所知的java惊现0day漏洞!8月30日,Oralce紧急发布了新版本的JDK和JRE,原因是发现了一个严重的0day漏洞CVE-2012-4681,远程攻击者可...

Beyond-Bit
2012/09/03
0
26
java7 WatchServiceDemo 文件系统监控

自己想搞点东西,发现一个java7的新特性蛮好用的,找了一个damo,贴出来希望能帮助到有需要的人。 package com.wanzi.core; import static java.nio.file.StandardWatchEventKinds.ENTRY_CR...

五岳儿爸
2013/05/16
0
1
深入理解Java 7(笔记)

switch Java 7 中新增加了对String的支持,除此之外还支持int、char、byte、short及其封装类Integer、Character、Byte、Short。对于基本类型的支持我们很容易理解,但是String类型使用了不同...

chris_2009
2016/03/30
103
0
java程序员修炼之道

第一部分:用Java7做开发 第一章:初识java7 1.1语言与平台《Java语言规范(JLP)》《JVM规范(VMSpec)》 1.2Coin项目:浓缩的都是精华 修改过程:1.更新JLS 2.在源码编译器中实现一个原型 3.为修改...

zhchl2010
2015/09/20
83
0
Java7的新特性1-project coin

Project coin project coin是Java一些语法改进的一个项目。 Strings in switch 在Java1.7之前,switch语句只能是byte、char、short和int以及包装类和枚举常量,比如: 在Java7中,扩展了允许...

mushui
2013/07/29
0
4

没有更多内容

加载失败,请刷新页面

加载更多

数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
5
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
5
0
GIL 已经被杀死了么?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/8KvQemz0SWq2hw-2aBPv2Q 花下猫语: Python 中最广为人诟病的一点,大概就是它的 GIL 了。...

豌豆花下猫
昨天
5
0
git commit message form

commit message一般包括3部分:Header、Body、Footer。 <type>(<scope>):<subject>blank line<body>blank line<footer> header是必需的,body、footer可以省略。 header中type、subject......

ninjaFrog
昨天
5
0
聊聊Elasticsearch的CircuitBreakerService

序 本文主要研究一下Elasticsearch的CircuitBreakerService CircuitBreakerService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/indices/breaker/CircuitBreakerService.ja......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部