Jdk1.7新特性 - 二进制标识、数字间隔符、泛型类型推断、资源自动管理、多异常处理等

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013379717/article/details/89955759

一、二进制字面量标识

    整数类型如(byte,short,int,long)都可以用二进制来表示。表示方法通过在二进制数的前面加入0b或者0B来标示

byte  num1 = 0b00001001;  // 1个字节8位
short num2 = 0b0010000101000101;  // 2个字节16位
int   num3 = 0b10100001010001011010000101000101;  // 4个字节32位
long  num4 = 0b0010000101000101101000010100010110100001010001011010000101000101L; 
 // 8个字节64位

二、数字类型支持间隔符

    使用下划线(_)将数字分组,以更友好的表达方式提高可读性。 下划线不允许出现在 开头和结尾、0b和0x左右、小数点前后、L和F标识符前。

/**
 * 示例
 */
long number = 1234_5678_9012_3456L;
float price =  3.14_15F;
long hexnum = 0xFF_EC_DE_5E;
long bytes  = 0b11010010_01101001_10010100_10010010;

/**
 * 规则
 */
float f1 = 5_.5F;         // 无效 (不能在小数点前后)
float f2 = 5.2_F;         // 无效 (不能在标识符前)
int x1 = _52;             // 无效 (不能在开头)
int x2 = 52_;             // 无效 (不能在结尾)
int x3 = 5_2;             // 有效
int x4 = 5_______2;       // 有效 
int x5 = 0_x52;           // 无效 (0x不能拆分)
int x6 = 0x_52;           // 无效 (不能在0x左右)
int x7 = 0x5_2;           // 有效
int x8 = 0x52_;           // 无效 (不能在结尾)
int x9 = 0_52;            // 有效 (八进制)
int x10 = 05_2;           // 有效 (八进制)
int x11 = 052_;           // 无效 (不能在结尾)

三、Switch支持String类型

    在switch的参数中,除了支持byte、short、char、int、long以及包装类之外,也开始支持将String作为参数

switch (sw) {
case "N1":
	System.out.println("第一季度");
	break;
case "N2":
	System.out.println("第二季度");
	break;
case "N3":
	System.out.println("第三季度");
	break;
case "N4":
	System.out.println("第四季度");
	break;
default:
	System.out.println("未知");
	break;
}

四、泛型类型实例化类型推断

    从上下文推断出参数类型,所以可以用一组空类型参数(<>)替换泛型类构造函数的调用所需的类型参数

/**
 * Jdk 1.7 之前
 */
Map<String, List<String>> oldMap = new HashMap<String, List<String>>();
/**
 * Jdk 1.7 之后
 */
Map<String, List<String>> newMap = new HashMap<>();

五、外部资源支持自动管理

    语句 try-with-resources 是一个用来自动关闭外部资源的语法特性,将外部资源句柄对象的声明和创建放在 try 关键字后面的小括号内即可

    语句 try-with-resources 能够确保在这个 try-catch 代码块执行完毕后,每个资源都会按照声明的逆序被自动关闭,无需再通过显示的代码关闭

    任何实现了Java.lang.AutoCloseable和java.io.Closeable的对象都可以使用 try-with-resource 语句来实现异常处理和关闭资源

    使代码更精炼和完整,免去了在 finally 中关闭资源的工作和忘记关闭的风险,而 finally 依然可以用来处理一些一定要被执行的代码块

    如果对外部资源的处理和对外部资源的关闭均遭遇了异常,“处理异常”将被抛出,而“关闭异常”将被抑制而存放在“处理异常”的被抑制异常列表中

  •     1、Jdk 1.7 之前 的 资源管理
FileReader fr = null;
BufferedReader br = null;
try {
	fr = new FileReader("d:/tst/tst.txt");
	br = new BufferedReader(fr);
	
	String line = null;
	while ((line = br.readLine()) != null) {
		System.out.println(line);
	}
} catch (Exception e) {
	System.out.println(e);
}finally {
	try {
		if(br != null) br.close();
		if(fr != null) fr.close();
	} catch (Exception ex) {
		System.out.println(ex);
	}
}
  •     2、Jdk 1.7 之后 的 资源管理
try (
	FileReader fr =	new FileReader("d:/tst/tst.txt");
	BufferedReader br = new BufferedReader(fr);	
){
	String line = null;
	while ((line = br.readLine()) != null) {
		System.out.println(line);
	}
} catch (Exception e) {
	System.out.println(e);
}

六、一次Catch处理多个异常

    从Jdk1.7开始,一个catch代码块可以处理多个异常。如果需要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码的重复度

    多个异常之间用管道符(|)将它们分开,在这种情况下异常参数变量(ex)是定义为final的,所以不能被修改。这一特性将生成更少的字节码并减少代码冗余

  • 1、Jdk 1.7 之前 的 catch处理
try {
	......
}catch (IOException ie) {
	System.out.println(ie);
}catch (SQLException se) {
	System.out.println(se);
}catch (Exception ex) {
	System.out.println(ex);
}
  • 2、Jdk 1.7 之后 的 catch处理
try {
	......
} catch(IOException | SQLException | Exception ex){
    System.out.println(ex);
}

猜你喜欢

转载自blog.csdn.net/u013379717/article/details/89955759
今日推荐