一、二进制字面量标识
整数类型如(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);
}