论JDK5/7/8版本都做出了哪些革新
在Java发展的里程碑上,有三个版本做出的改动,是革命性的
为什么说是革命性的呢?
因为这三个版本所推出的有些新机制,在之后的Java框架开发、新类的产生等等中,
都被广泛使用了。
那么,这三个版本的JDK,都有哪些新特性呢?
现在,右转哥就来带你剖析这三个版本的JDK的新特性:
首先是 JDK5:
JDK5
新特性:
- 自动拆装箱
- 泛型
- 增强for
- 可变参数
- 枚举
那么,现在,本人就来介绍下这5个新特性:
首先是 自动拆装箱:
自动拆装箱:
关于这个知识点,请观看本人博文 —— 《详解 泛型 与 自动拆装箱》
泛型:
关于这个知识点,请观看本人博文 —— 《详解 泛型 与 自动拆装箱》
增强for:
什么是增强for呢?
可能有的同学知道这种格式以及使用,但是不知道名词。
那么,现在,本人就来通过一段代码解释下这个名词:
package edu.youzg.about_new_features.core.about_jdk5.core;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(4);
list.add(9);
list.add(9);
list.add(4);
for (Integer integer : list) {
System.out.println(integer);
}
}
}
那么,本人来展示下运行结果:
看到上面的代码的同学,估计惊讶到嘴都合不拢了吧。
没错,正是这种格式的for循环:
for(集合存储的类或其父类类型 对象 : 集合)
那么,现在,本人再来介绍下可变参数:
可变参数:
至于可变参数,我们可能自己编写程序时还没用到过
但是,在我们学习反射机制的时候,用过JDK中的提供的方法的可变参数。
那么,现在,本人就来展示下可变参数的使用:
package edu.youzg.about_new_features.core.about_jdk5.core;
public class Test {
public static void main(String[] args) {
show();
show("你好");
show("我很阔奈", "清亏窝全");
}
static void show(String...arg) {
for (int i = 0; i < arg.length; i++) {
System.out.println(arg[i]);
}
}
}
那么,本人来展示下运行结果:
枚举:
请观看本人博文 —— 《详解 枚举》
那么,现在,本人来介绍下JDK7的新特性:
JDK7
新特性:
- 其它进制字面量
- 数字字面量可以出现下划线
- switch 语句可以用字符串
- 泛型简化
那么,现在,本人就来介绍下这4个新特性:
其它进制字面量:
在我们学习编程语言之前,我们就了解一个知识点 —— 进制转换问题:
有关进制转换问题,请观看本人博文 —— 《进制 概述》
那时候可能有同学在想:
在Java中都学了这么久了,还没见过其它进制,这个知识点不就没用了吗?
并不是的,我们用流传输的数据,所生成的字节码文件等等,
都是以其它进制存储的数据。
那么,在JDK7之后,Java支持其它进制的字面量了。
但是,本人要提醒一点:
print之类的方法,默认会将其他进制的数转化为相应的十进制数,再输出
现在,本人来提供一段代码来展示下:
package edu.youzg.about_new_features.core.about_jdk7.core;
public class Test {
public static void main(String[] args) {
//JDK1.7 支持不同进制的写法
/* 0b/0B开头,就是二进制 */
System.out.println(0b100);
/* 0开头,就是八进制 */
System.out.println(0100);
/*1~9开头,就是十进制 */
System.out.println(100);
/* 0x/0X开头,就是十六进制 */
System.out.println(0x100);
}
}
那么,本人现在来展示下运行结果:
数字字面量可以出现下划线:
Java为了增强对数值的阅读性,JDK7提供了'_'对数据分隔。
但是,本人要说明几点问题:
说明:
- 不能出现在进制标识和数值之间
- 不能出现在数值开头和结尾
- 不能出现在小数点旁边
那么,本人来通过一段代码来展示下:
package edu.youzg.about_new_features.core.about_jdk7.core;
public class Test {
public static void main(String[] args) {
//JDK1.7 支持位数分隔符
int num = 10_0000_0000;
System.out.println(num);
}
}
现在,本人来展示下运行结果:
可以看到,我们所加的分隔符,并没有对数据本身产生影响,
但是增强了数据的可读性。
switch 语句可以用字符串:
本人直接来上代码展示这个特性:
package edu.youzg.about_new_features.core.about_jdk7.core;
public class Test {
public static void main(String[] args) {
String str = "清亏窝全";
switch (str) {
case "清亏窝全":
System.out.println("你阔奈🐎");
break;
default:
System.out.println("窝挺不间");
}
//ArrayList<String> strings = new ArrayList<>();
}
}
那么,本人来展示下运行结果:
泛型简化:
概述:
我们在new 一个带有泛型的类的对象的时候,可以省略new 之后的类的泛型。
那么,现在,本人来展示下这个新特性:
可以看到,编译器没有报错!
那么,现在,本人来讲解下本篇博文的最后一个知识点 —— JDK8的新特性:
JDK8
新特性:
- 新增的日期时间API
- Lambda表达式
- stream流
那么,现在,本人就来介绍下这3个新特性:
首先是 新增的日期时间API:
新增的日期时间API:
请观看本人博文 —— 《详解 JDK8 新增的日期时间类》
然后是 Lambda表达式:
Lambda表达式:
请观看本人博文 —— 《详解 Lambda表达式》
最后,本人再来讲解最后一个新特性 —— stream流:
stream流:
请观看本人博文 —— 《详解 stream流》