论JDK5/7/8版本都做出了哪些革新

在Java发展的里程碑上,有三个版本做出的改动,是革命性的
为什么说是革命性的呢?
因为这三个版本所推出的有些新机制,在之后的Java框架开发、新类的产生等等中,
都被广泛使用了。
那么,这三个版本的JDK,都有哪些新特性呢?
现在,右转哥就来带你剖析这三个版本的JDK的新特性:


首先是 JDK5:

JDK5

新特性

  1. 自动拆装箱
  2. 泛型
  3. 增强for
  4. 可变参数
  5. 枚举

那么,现在,本人就来介绍下这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流》


posted @ 2020-03-05 11:24  在下右转,有何贵干  阅读(368)  评论(0编辑  收藏  举报