JDK每个版本都会带来一些新东西,例如里程碑式的1.5。在这里主要总结一下JDK1.7和1.8的一些新特性。
JDK1.7新特性
String能控制switch语句
话不多说,直接上代码测试一下(用的是1.8测试):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package com.haozai;
import java.util.Scanner;
public class String_Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//接收控制台输入信息
String str = sc.nextLine();
switch (str) {
case "hello":
System.out.println("hello world!");
break;
default:
System.out.println("你好,世界!");
break;
}
}
}
测试结果:
在JDK1.5之前,switch循环只支持byte short char int四种数据类型.
JDK1.5 在switch循环中增加了枚举类与byte short char int的包装类,对四个包装类的支持是因为java编译器在底层手动进行拆箱,而对枚举类的支持是因为枚举类有一个ordinal方法,该方法实际上是一个int类型的数值.
JDK1.7开始支持String类型,但实际上String类型有一个hashCode算法,结果也是int类型.而byte short char类型可以在不损失精度的情况下向上转型成int类型.所以总的来说,可以认为switch中只支持int.
try-with-resources和Multi catch
try-with-resources:在Java编程中,如果我们打开了外部资源(文件、数据库连接、网络连接等),我必须在用过之后将它关闭,并且是需要我们手动关闭,因为外部的资源不是JVM管理的,无法享用JVM垃圾回收机制,如果我们不在编程时确保在正确的时机关闭外部资源,就会导致外部资源泄露,紧接着就会出现文件被异常占用,数据库连接过多导致连接池溢出等诸多很严重的问题。
Multi catch:开发者现在能够在一个 catch 代码块中捕获多个异常类型。
讲个新特性在一个例子中展现:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22package com.haozai;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Try_Witch_Catch {
public static void main(String[] args) {
try(FileInputStream fi = new FileInputStream(new File("C://ss.xml"))){
byte[] bytes = new byte[2048];
int index = 0;
while((index = fi.read(bytes)) != -1) {
String s = new String(bytes);
System.out.println(s);
}
int a = 1/0;
}catch (IOException | ArithmeticException e) {
System.err.println(e);
}
}
}
控制成功打印出文件,并且资源会自己关闭,异常也会被捕获:
二进制整型字面值
在旧版的 Java 中,字面值只支持十进制、八进制、十六进制3种类型,在Java7中又多了一种二进制,它的前缀是0B,配合需要位运算的场景特别合适,尤其是跟下划线组合使用:1
int i = 0B1010_1100_0010_1100_0000_1111_0001_1011;
数字常量 - 新形式写法
这个特性的引入对我们阅读数字有很好的帮助。可以使用下划线去划分,这样更加便于阅读。这个下划线不是说一定要 3 位数字划分一次,多少位都可以,可以根据个人阅读习惯,编译的时候JVM会将下划线去掉。1
2
3long amount = 123000555999666L;
//JDK7特性写法
long amount1 = 123_000_555_999_666L;
注意:只能将下划线置于数字之间。
以下地方不能放置下划线:
- 数字的开头或结尾;浮点数中靠近小数点的位置;
- F 或 L 后缀之前期望放置一串数字的地方。
创建泛型实例时自动类型推断
一下子说不明白,先记录一片博客地址http://www.365mini.com/page/13.htm
JDK1.8新特性
Lambda表达式
Lambda表达式【Lambda Expressions】也可称为闭包,是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中),使用 Lambda 表达式可以使代码变的更加简洁紧凑。
Lambda表达式可以为函数式接口生成一个实例,Lambda表达式可以被赋给一个变量,或传递给一个接受函数式接口作为参数的方法!但Lambda表达式的签名要和函数式接口的抽象方法保持一致!
Lambda表达式语法:1
2
3(parameters) -> expression
或
(parameters) -> { statements; }
未完 明天再更新
参考:1
2
3https://blog.csdn.net/renfufei/article/details/24600507
https://blog.csdn.net/fanxiaobin577328725/article/details/53066450
https://blog.csdn.net/fanxiaobin577328725/article/details/81981618#t1