学习目的
- 了解java语言的发展轨迹与版本特点
- 结合实际联系java各版本特点,展望java的未来发展
一.Java技术体系
- Java程序设计语言
- 各硬件平台(操作系统)的Java虚拟机实现
- Class文件格式
- Java类库API
- 第三方类库(来自商业或开源社区)
二.Java各发展版本
- 1991年:Oak语言(Java前身)产生,专注于在各电子产品上运行的程序架构,重点在电视机顶盒。
-
1995年:Java1.0发布
口号Write Once,Run Anywhere,意为:"一次编译,处处运行"。 - 1996年:JDK1.0发布,
- 提供第一个纯解释执行的Java虚拟机实现(Sun Class VM)
- 提供Java虚拟机、Applet(Java小程序)、AWT(java图形设计)等。
- 1997年:JDK1.1发布
- 提供基础技术支撑点,如JAR文件格式、JDBC、JavaBeans、RMI(远程调用)等;
- 语法增强点,如 Inner Class内部类、 Reflection反射等。
- 1998年:JDK1.2发布
- 将Java技术体系拆分为面向桌面开发J2SE、面向企业开发J2EE、面向手机等移动终端开发J2ME等;
- 提供基础技术支撑点,如EJB(J2EE规范)、Java Plug-in(运行时插件)、Java IDL(平台对象请求代理体系结构)、Swing等;
- 第一次在java虚拟机中内置JIT(Just In Time)即时编译器;
- 提供三款虚拟机:Classic VM,HotSpot VM,Exact VM;
- 语法增强点,添加strictfp关键字;
- 接口增强点,添加Collections集合类等。
1999年:HotSpot虚拟机诞生,在JDK1.3之后成为默认虚拟机
2000年:JDK1.3发布
- API/接口增强点,添加了数学运算、Timer定时器接口等;
- 新增JavaSound(声音)类库;
- 添加 jar文件索引;
- 将JNDI扩展服务 转变为 平台级基础服务。
- 2002年:JDK1.4发布(Java真正走向成熟的标志版本)
- 提供新的技术特性,如正则表达式、异常链、NIO(同步非阻塞IO)、Imgae I/O(图片流)、日志类、XML解析器、XSTL(可扩展样式表转换语言)等;
- 增加服务,新增Java打印服务、断言、Preferences(可以操作系统的高级功能)、支持IPV6等;
- 更改JDBC 3.0(jdbc高级);
- 竞争:微软.NET发布。
- 2004年:JDK5发布
- 语法增强点,添加了自动装箱、泛型、动态注解、枚举、可变长参数(Object... args)、遍历循环(foreach循环)等;
- 虚拟机改进,改进java内存模型(JMM)、新增元数据、提供java.util.concurrent并发包等。
- 2006年:JDK6发布
- 改名,将J2EE、J2SE、J2ME改为Java EE、Java SE、Java ME等;
- 技术增强点,提供 初步的动态语言支持(内置Mozilla JavaScript Rhino引擎实现)、编译期注解处理器、微型HTTP服务器API;
- 语法增强,新增可插拔注解、Java Compiler (Java™ 编程语言编译器接口);
- 服务增强,新增Java GSS(通用安全服务)、Kerberos( 安全认证)、 Web Services(web服务);
- 虚拟机改进,增强了锁与同步、垃圾收集、类加载等;
- 更改JDBC 4.0(jdbc高级);
- Java在GPL v2协议下开源。
- 2009年:JDK7发布
- Sun公司(Java母公司)被Oracle公司收购;
- 语法改进,switch支持字符串条件、泛型自动类型推断、动态语言支持、加减乘除安全机制、Map并发;
- 虚拟机改进,提供新的G1收集器(垃圾收集器;
- 技术增强:加强对非Java语言的调用支持、提供可并行的类加载架构;
- 开始为Mac OS系统提供支持;
- 对ARM指令集架构提供支持;
- 2014年:JDK8发布
- 启用JEP(Java Enhancement Proposals):JDK增强建议;
- JEP126,支持Lambda表达式,更加流畅的函数式表达语言;
- JEP104,内置Nashorn JavaScript引擎的支持;
- JEP150,提供新的时间、日期等API接口;
- JEP122,彻底移除HoSpot虚拟机的永久代。
- 2017年:JDK9发布
- 支持Jigsaw模块化功能;
- 工具增强,如增强JS Shell、JLink、JHSDB等;
- 整顿HotSpot各个模块原先各自为战的日志系统;
- 支持HTTP2客户端API等;
- 2018年3月:JDK10发布
- 内部重构:统一源仓库、统一垃圾收集器接口、统一即时编译器接口;
- 引入新的Graal即时编译器,未来虚拟机无语言倾向,跨越所有语言的虚拟机;
- Java EE 改名 Jakarta EE。
- 2018年9月:JDK11发布,该版本为LTS长期支持版本
- 提供新的垃圾收集器--ZGC收集器(革命性的一个收集器);
- 将 类型推断 加入Lambda语法;
- 两个版本JDK:OpenJDK(基于GPI v2 + CE协议,免费)、OracleJDK(基于OTN协议,个人免费)。
- 2019年2月:JDK12发布
- OpenJDK 8 和 OpenJDK 11 从Oracle手交由RedHat管理和维护;
- 提供新的Switch表达式、Java微测试套件等;
- 加入RedHat开发的Shen-andoah垃圾收集器。
- 2019年9月:JDK13发布
- 对switch表达式优化更新(表达式拥有返回值);
- 文本块升级,包括html、sql、解释等;
- java虚拟机增强,取消使用未使用的内存;
- 2020年3月:JDK14发布
三.JDK新特性
- 新特性概念
JDK新特性指的是在JDK1.4版本标志着Java完全走向成熟之后,每次版本更新时新增或改进的功能特性,最大特点的即是目前常用的JDK1.5、JDK1.6、JDK8、JDK11、JDK13版本等。 - JEP(JDK增强建议)
JEP全称Java Enhancement Proposals,意为JDK增强建议 / JDK版本更新建议。由JDK8版本开始,以后JDK每一版本的更新都以 JEP + 代号 来表示该版本新增的功能或改进的功能服务。
3.1 JDK1.5新特性
自动装箱拆箱
- 自动装箱:支持将基本数据类型自动转换成包装类,Integer in = 123;
- 自动拆箱:支持将包装类型自动转换成基本类型,int i = in;
泛型
引入泛型机制T<> ,通过给数组或者集合定义泛型,提前确定数组或集合中的元素类型(编译期提前检查元素类型),可以提前发现错误,且能消除强制类型转换;
metadata(元数据)
相当于"元注解",是用来描述数据的数据。通俗来讲是描述代码间的关系,或者描述代码与其他资源(如数据库表)之间内在联系的数据。
旧版元数据使用外部文件表示元数据JDK5之后采用标签形式<类似于注解>来表示元数据;
- struts:struts-config.xml配置文件
- hibernate:.hbm文件
- EJB:ejb-jar.xml配置文件
ntrospector(内省)
内省指的是是Java对JavaBean类属性、事件的一种缺省处理方法。在计算机中,内省是指程序在运行时 检查对象类型的一种能力,内省通常也运行时类型检查(内省底层使用反射实现);
enum(枚举)
枚举类属于"替代"public static fianl常量的一个类,往枚举类中定义的实例变量只能是常量 且必须全部中文大写。
- 枚举类中定义的变量不需要修饰符和类型,只需要大写的变量名即是常量
- 枚举类也和普通类一样拥有方法,但是定义方法之前必须一定先有实例变量;
静态引入
import 导入的一种,普通导入表示去找哪一个类,到哪一个包下去找哪些被使用到的类。
静态导入使用的是import static,主要是导入指定类的某个静态成员变量、静态方法,或者导入指定类的所有静态成员变量、静态方法(import static 包名.*)。
可变长参数(Varargs)
可变参数指的是允许在方法的形参使用三个点 args... 表示该形式参数长度可变,即该形参的数量不确定。
但可变长度形参只允许定义一个,且必须只能定义在方法参数列表的最后一个(不允许多个args...出现在同一个方法参数列表中,也不允许args...比普通参数先出现)。
定义可变长度形参后增加3个点即(...);则表明该形参可以接受多个参数值,多个参数值会被当做数组传入。
可变长参数实际上还是属于一个数组对象,拥有下标且可以通过下标获取可变长参数的每一个参数
foreach(高级循环)
增强循环,通过数组或集合对象,可以快速遍历,提高效率(但是不能根据下标遍历获取元素);
JMM(内存模型)
java内存模型全称Java Memory Model,是java虚拟机规范定义的,用来屏蔽java程序在不同的硬件和操作系统 对内存的访问的差异。
JMM内存模型主要设计用于实现java程序在各种不同的平台上都能达到内存访问的一致性,避免程序在移植时因为硬件或操作系统的不同导致不可行、访问不通过等。
concurrent(并发包)
通过在java.util工具包下引入新的并发包(类库),支持Java本身的并发开发。引入concurrent包是java支持高并发的一个体现。
3.2 JDK6新特性
命名方式变更
命名方式变更指的是Java产品路线命名的变更。
J2EE更名为Java EE,java企业版平台;
J2SE更名为Java SE,java标准版平台;
J2ME更名为Java ME,java微缩版平台。