编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

详解java5、java6、java7、java8、java9新特性

gowuye 2024-04-03 16:13 10 浏览 0 评论

1. 介绍

JAVA作为使用的主力语言,掌握下其历史发展也是有必要的。看看从JAVA5开始到现在的JAVA9有哪些变化。借此机会,也可以看看哪些特性我们是已经用到的,哪些是还没有用到的。

我们在IDEA里面也可以看到language level里面的信息,这里也大致写了下各个版本JDK的新特性。

简单概括下就是:

JAVA1.3:普通的原始的JAVA,基本语法相信大家都见过了

JAVA1.4:assert关键字

JAVA5:枚举类型、泛型、自动拆装箱

JAVA6: @Override注解

JAVA7: <>符号、ARM支持、支持多catch

JAVA8:Lamda表达式,类型注解等

JAVA9: 模块化、接口中的私有方法等

下面我们更加详细的分析下各个版本有哪些新特性。

2. JAVA5新特性

2.1 泛型 Generics

引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处。Parameterized Type作为参数和返回值,Generic是vararg、annotation、enumeration、collection的基石。

泛型可以带来如下的好处总结如下:

类型安全:抛弃List、Map,使用List 、Map 给它们添加元素或者使用Iterator 遍历时,编译期就可以给你检查出类型错误

方法参数和返回值加上了Type: 抛弃List、Map,使用List 、Map

不需要类型转换:List list=new ArrayList ();

类型通配符“?”: 假设一个打印List 中元素的方法printList,我们希望任何类型T的List 都可以被打印

2.2 枚举类型 引入了枚举类型

2.3 自动装箱拆箱(自动类型包装和解包)autoboxing & unboxing 简单地说是类型自动转换。 自动装包:基本类型自动转为包装类(int ——Integer) 自动拆包:包装类自动转为基本类型(Integer——int)

2.4 可变参数varargs(varargs number of arguments) 参数类型相同时,把重载函数合并到一起了。 如:

publicvoidtest(object... objs){for(Object obj:objs){ System.out.println(obj); }}

2.5 Annotations(重要) 它是java中的metadata(注释)

注解在JAVA5中就引入了。这是非常重要的特性。现在注解的应用已经随处可见。不过JAVA5的注解还不成熟,没法自定义注解。

2.6 新的迭代语句

for(intn:numbers){//process}

2.7 静态导入(import static )

导入静态对象,可以省略些代码。不过这个也不常用。、

importstaticjava.lang.System.out;//导入java.lang包下的System类的静态方法out;publicclassHelloWorld{publicstaticvoidmain(String[] args){out.print("Hello World!");//既是在这里不用再写成System.out.println("Hello World!")了,因为已经导入了这个静态方法out。}}

2.8 新的格式化方法(java.util.Formatter)

formatter.format("Remaining account balance: $%.2f", balance);

2.9 新的线程模型和并发库Thread Framework(重要)

最主要的就是引入了java.util.concurrent包,这个都是需要重点掌握的。

HashMap的替代者ConcurrentHashMap和ArrayList的替代者CopyOnWriteArrayList

在大并发量读取时采用java.util.concurrent包里的一些类会让大家满意BlockingQueue、Callable、Executor、Semaphore

3. JAVA6

JAVA6当中

3.1 Web Services

优先支持编写 XML web service 客户端程序。你可以用过简单的annotaion将你的API发布成.NET交互的web services. Mustang 添加了新的解析和 XML 在 Java object-mapping APIs中, 之前只在Java EE平台实现或者Java Web Services Pack中提供.

3.2 Scripting

现在你可以在Java源代码中混入JavaScript了,这对开发原型很有有用,你也可以插入自己的脚本引擎。

3.3 JDBC4.0

JAVA6将联合绑定 Java DB (Apache Derby). JDBC 4.0 增加了许多特性例如支持XML作为SQL数据类型,更好的集成Binary Large OBjects (BLOBs) 和 Character Large OBjects (CLOBs) .

3.4 UI优化

GUI 开发者可以有更多的技巧来使用 SwingWorker utility ,以帮助GUI应用中的多线程。, JTable 分类和过滤,以及添加splash闪屏。

Swing拥有更好的 look-and-feel , LCD 文本呈现, 整体GUI性能的提升。Java应用程序可以和本地平台更好的集成,例如访问平台的系统托盘和开始菜单。Mustang将Java插件技术和Java Web Start引擎统一了起来。

3.5 监控管理增强 添加更多的诊断信息,绑定了不是很知名的医生 memory-heap 分析工具Jhat 来查看内核导出。

3.6 编译API compiler API提供编程访问javac,可以实现进程内编译,动态产生Java代码 ##3.7 自定义注解 Java tool和framework 提供商可以定义自己的 annotations ,并且内核支持自定义annotation的插件和执行处理器

3.8 安全性 XML-数字签名(XML-DSIG) APIs 用于创建和操纵数字签名); 新的方法来访问本地平台的安全服务,例如本地Microsoft Windows for secure authentication and communicationnative 的Public Key Infrastructure (PKI) 和 cryptographic services, Java Generic Security Services (Java GSS) 和 Kerberos services for authentication, 以及访问 LDAP servers 来认证用户.

4. JAVA7

4.1 集合类的语法支持

原来的样子

List list =newArrayList(); list.add("item");Stringitem = list.get(0);Setset=newHashSet();set.add("item");Map map =newHashMap(); map.put("key",1);intvalue = map.get("key");

现在的样子:(这些集合是不可变的...)

List list = ["item"];Stringitem = list[0];Setset= {"item"};Map map = {"key":1};intvalue = map["key"];

4.2 自动资源管理

Java中某些资源是需要手动关闭的,如InputStream,Writes,Sockets,Sql classes等。这个新的语言特性允许try语句本身申请更多的资源,这些资源作用于try代码块,并自动关闭。

以前的写法

BufferedReader br =newBufferedReader(newFileReader(path));try{returnbr.readLine(); }finally{ br.close(); }

现在的写法(不需要finally来释放资源了)

try (BufferedReaderbr = new BufferedReader(newFileReader(path)) { return br.readLine();}

4.3 类型推断

以前的写法:

Map> anagrams =newHashMap>();

现在的写法

Map> anagrams =newHashMap<>();

4.4 数字字面量下划线支持

很长的数字可读性不好,在Java 7中可以使用下划线分隔长int以及long了。如:

intone_million = 1_000_000;

这样子还真看不惯。。。不过的确是可读性好了。

4.5 switch中使用string

String s ="test";switch(s) {case"test": System.out.println("test");case"test1": System.out.println("test1");break;default: System.out.println("break");break; }

4.6 新增一些取环境信息的工具方法

FileSystem.getJavaIoTempDir()// IO临时文件夹 FileSystem.getJavaHomeDir()// JRE的安装目录 FileSystem.getUserHomeDir()// 当前用户目录 FileSystem.getUserDir()// 启动java进程时所在的目录5

5. java8

5.1 lambda表达式

提供了lambda表达式,增加了很多内置函数式接口。尤其是其中的stream接口提供了

5.2 注解改进

例如支持多重注解,还有新的target等

这是我的B站公众号【Linda的编程学习资料库】各位大佬有空可以关注下,每天更新Java相关视频教程。

学习中遇到问题有不明白的地方,小编给大家整理了一份B站java视频教程:尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili



作者:未影P
链接:https://www.jianshu.com/p/498168f7c443
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐

爱上开源之golang入门至实战第四章-切片(Slice)

前言Go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可...

Go语言入门必知教程-切片

切片是一种灵活的和可扩展的数据结构,用于实现和管理数据集。切片由多个元素组成,所有元素都是相同类型的。切片是动态数组的一部分,可以根据需要进行增长和收缩。与数组一样,切片也可以索引。切片具有容量和长度...

Go语言基础-切片

切片是什么?切片是Go语言的一种数据结构。和数组相似,不过切片可以在它的结尾增加更多的元素。这样可变长度在实际编程中更为有用。声明切片切片的声明和数组也很相似,只是声明切片时不需要指定大小。例:va...

5分钟掌握GO中切片的基本使用方法

最近Golang越来越火,不少小伙伴都纷纷开始学习Golang,但对于原先为C++或者JAVA的同学,用习惯了数据、list、vector等,会对Go的切片slice不习惯,下面整理出go中slice...

揭秘 Go 切片(Slice)的秘密

当向切片添加新参数时,底层数组会发生什么变化?它会扩展以容纳更多元素吗?在这篇文章中,我们将深入探讨切片的内部工作原理,以及如何利用这些知识来进行更好的内存管理和性能优化。具体而言,我们将探索Go...

【Go语言slice详解】深入掌握Go语言中的slice类型及常用操作!

Go语言中的slice(切片)是一种非常方便的数据结构,可以动态地增加或减少其元素数量,且可以访问底层数组的任意一个子序列。本文将对Go语言中的slice进行详细的讲解。Slice的定义在Go语言中,...

掌握GO中的Slice,这就够了

最近Golang越来越火,不少小伙伴都纷纷开始学习Golang,但对于原先为C++或者JAVA的同学,用习惯了数据、list、vector等,会对Go的切片slice不习惯,下面整理出go中slice...

golang2021面向对象(26)Go语言类型内嵌和结构体内嵌

结构体可以包含一个或多个匿名(或内嵌)字段,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型也就是字段的名字。匿名字段本身可以是一个结构体类型,即结构体可以包含内嵌结构体。?可以粗略地将这个...

2022-11-13:以下go语言代码中,如何获取结构体列表以及结构体内

2022-11-13:以下go语言代码中,如何获取结构体列表以及结构体内的指针方法列表?以下代码应该返回{"S1":["M1","M2"],"S...

Go语言文件和目录操作

文件和目录操作概述一、文件和目录操作概述在计算机中,文件和目录是存储数据的重要方式。在Go语言中,我们可以使用os和io/ioutil包提供的函数和结构体来进行文件和目录操作。本文将详细介绍Go语言中...

跟我一起学习go语言(五)golang中结构体的初始化方法

1、自定义一个结构体typeVertexstruct{X,Yfloat64}2、初始化方法-指针:rect1:=new(Vertex)rect2:=&Vertex...

Go复合数据类型:结构体

一种通用的、对实体对象进行聚合抽象的能力,在Go中,提供这种聚合抽象能力的类型是结构体类型,也就是struct。自定义一个新类型在Go中,我们自定义一个新类型一般有两种方法。第一种是类型定义...

Go语言基础:方法

导读在阅读本文章前,假定你具备如下能力:?已掌握结构体1.方法1.1方法的概念在理解程序中方法的概念时,我们先看看现实中的一些情况,这样相对比较好理解一些。在农村的朋友可能会知道,在医疗落后的情况...

为什么 Go 语言 struct 要使用 tags

在Go语言中,struct是一种常见的数据类型,它可以用来表示复杂的数据结构。在struct中,我们可以定义多个字段,每个字段可以有不同的类型和名称。除了这些基本信息之外,Go还提供了s...

一文带你掌握掌握 Golang结构体与方法

1.Golang结构体的概念及定义结构体是Golang中一种复合类型,它是由一组具有相同或不同类型的数据字段组成的数据结构。结构体是一种用户自定义类型,它可以被用来封装多个字段,从而实现数据的...

取消回复欢迎 发表评论: