简介
Java 是什么
Java 是一种广泛使用的面向对象编程语言,具有卓越的通用性、高效性、跨平台性和安全性,从语法和结构上,Java 具有清晰的语法规则和简洁的代码风格,这使得开发者能够更轻松地编写和理解代码。
Java通常分为三个主要版本:
SE(JavaSE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
EE(JavaEE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。从2018年2月26日开始,J2EE改名为Jakarta EE [1]。
ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。
JDK
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
JDK包含的基本组件包括:
- javac(编译器,将源代码转成字节码)
- jar(打包工具,将相关的类文件打包成一个文件)
- jdb(调试器,就是debugger,查错工具)
- javadoc(文档生成器,从程序源代码中提取、方法、成员等注释成一个和源代码配套的API帮助文档)
- appletviewer(运行 Java 小程序(applet)的工具 ,它会启动一个窗口显示 applet 的界面,并允许你进行调试和测试。老旧的 Java 代码和测试环境中)
- javah(用于生成Java Native Interface头文件的工具。JNI是一种Java编程的接口,它允许 Java 代码与用其他语言(如 C 或 C++)编写的本地代码进行交互。)
- javap(Java class文件分解器,可以反编译,也可以查看Java编译器生成的字节码)
- jconsole(Java 提供的一个工具,用于监视和管理 Java 应用程序的性能和资源使用)等
JDK结构图:
附加介绍:
- JRE(Java Runtime Environment):
JRE是运行 Java 应用程序所需的最小环境。它包含了 JVM 和 Java 核心类库(Core Libraries),这些类库提供了 Java 应用程序运行所需的基本功能和资源。如果只需运行 Java 应用程序而无需进行开发,则只需安装 JRE。JRE允许用户在计算机上运行已编译的 Java 程序。
- JVM(Java Virtual Machine):
JVM 是 Java 虚拟机,它是 Java 平台的核心组件之一。JVM 在计算机上执行 Java 字节码,并提供了内存管理、垃圾回收、安全性等重要功能。JVM 是 Java 应用程序与底层操作系统之间的中间层,使得 Java 应用程序具有跨平台的能力。不同的操作系统需要特定版本的 JVM 来运行 Java 应用程序。
JDK 是用于开发 Java 应用程序的工具包,其中包含了 JRE;而 JRE 是运行 Java 应用程序所需的最小环境;JVM 则是在计算机上执行 Java 字节码的虚拟机,它提供了运行 Java 程序的基础设施。
SE(JavaSE)对应JDK版本(jdk 版本越高性能越好):
版本 | JDK版本(对应) | 名称 | 发行日期 |
JDK 1.0 | JDK 1.0 | Oak | 1996-01-23 |
JDK 1.1.4 | JDK 1.1.4 | Sparkler(宝石) | 1997-09-12 |
JDK 1.1.5 | JDK 1.1.5 | Pumpkin(南瓜) | 1997-12-13 |
JDK 1.1.6 | JDK 1.1.6 | Abigail(阿比盖尔–女子名) | 1998-04-24 |
JDK 1.1.7 | JDK 1.1.7 | Brutus(布鲁图–古罗马政治家和将军) | 1998-09-28 |
JDK 1.1.8 | JDK 1.1.8 | Chelsea(切尔西–城市名) | 1999-04-08 |
J2SE 1.2 | JDK 1.2 | Playground(运动场) | 1998-12-04 |
J2SE 1.2.1 | JDK 1.2.1 | none(无) | 1999-03-30 |
J2SE 1.2.2 | JDK 1.2.2 | Cricket(蟋蟀) | 1999-07-08 |
J2SE 1.3 | JDK 1.3 | Kestrel(美洲红隼) | 2000-05-08 |
J2SE 1.3.1 | JDK 1.3.1 | Ladybird(瓢虫) | 2001-05-17 |
J2SE 1.4.0 | JDK 1.4.0 | Merlin(灰背隼) | 2002-02-13 |
J2SE 1.4.1 | JDK 1.4 | grasshopper(蚱蜢) | 2002-09-16 |
J2SE 1.4.2 | JDK 1.4 | Mantis(螳螂) | 2003-06-26 |
J2SE 5.0 | JDK 1.5 | 2004-09 | |
Java SE 5.0 (1.5.0) | JDK 1.5 | Tiger(老虎) | 2004-09-30 |
Java SE 6.0 (1.6.0) | JDK 1.6 | Mustang(野马) | 2006-04 |
Java SE 7.0 (1.7.0) | JDK 1.7 | Dolphin(海豚) | 2011-07-28 |
Java SE 8.0 (1.8.0) LTS(长期支持) | JDK 1.8 | Spider(蜘蛛) | 2014-03-18 |
Java SE 9 | JDK 1.9 | 2017-09-21 | |
Java SE 10 | JDK 10 | 2018-03-14 | |
Java SE 11 LTS(长期支持) | JDK 11 | 2018-09-26 | |
Java SE 12 | JDK 12 | 2019-03-20 | |
Java SE 13 | JDK 13 | 2019-09-17 | |
Java SE 14 | JDK 14 | 2020-03-17 | |
Java SE 15 | JDK 15 | 2020-09 | |
Java SE 16 | JDK 16 | 2021-03 | |
Java SE 17 LTS(长期支持) | JDK 17 | 2021-09 | |
Java SE 18 | JDK 18 | 2022-03-22 | |
Java SE 19 | JDK 19 | 2022-09-20 | |
Java SE 20 | JDK 20 | 2023-03-21 | |
Java SE 21 LTS(长期支持) | JDK 20 | 2023-09-19 | |
Java SE 22 | JDK 20 | 2024-03-19 |
每代JDK版本的主要特性和改进
将进一步详细描述每个JDK版本的主要特性和改进,涵盖从JDK 1.0到JDK 22的每个重要版本。以下是每个版本的详细更新内容:
- JDK 1.0 (1996)
-
基础API:包含了基本的核心类库,例如java.lang(基础类)、java.util(集合类和工具类)、java.io(输入输出流)、java.awt(图形用户界面)。
-
AWT(Abstract Window Toolkit):提供了基本的图形用户界面组件,如按钮、文本框等,但相对简单。
-
支持Java Applet:允许在网页中嵌入Java小程序(Applet)。
-
- JDK 1.1 (1997)
- 事件模型:增强了AWT事件处理模型,支持事件监听器,用于处理用户交互事件(如点击、输入)。
- JavaBeans:引入了可重用组件的模型,JavaBeans使得开发工具可以处理可重用的Java组件。
- JDBC(Java Database Connectivity):提供了访问数据库的标准接口,简化了数据库操作。
- RMI(Remote Method Invocation):允许Java对象在网络上调用其他Java对象的方法,实现分布式计算。
- JNDI(Java Naming and Directory Interface):提供目录服务和命名服务,用于访问目录和命名信息(如LDAP)。
- 反射API:允许程序在运行时检查和操作类、方法、字段等信息,增强了动态编程能力。
- JDK 1.2 (1998)
- Java 2:重新设计了Java平台,引入了新的体系结构和功能。
- Swing:提供了丰富的用户界面组件,替代了AWT,并提供了更高的灵活性和可扩展性。
- Collections Framework:引入了List、Set、Map等集合类,提供统一的接口和操作方式,提高了数据结构的处理能力。
- Java Plug-in:使得Java应用程序可以嵌入到浏览器中运行,提高了Web应用的互动性。
- Java 2D API:提供了高质量的图形绘制和图像处理能力,用于生成复杂的2D图形。
- RMI-IIOP:允许Java RMI与CORBA(Common Object Request Broker Architecture)进行互操作,使得不同系统之间可以进行远程方法调用。
- JDK 1.3 (2000)
- 即时编译器(JIT):提升了Java应用程序的执行性能,通过即时编译将字节码转换为本地机器码。
- 性能改进:改进了RMI和JNDI的性能,提高了Java程序的响应速度和效率。
- JDK-Internal APIs:改进了Java内部API的实现,提高了内部操作的性能和可用性。
- 增强的安全性:增强了Java平台的安全机制,包括改进了沙箱模型和权限控制。
- JDK 1.4 (2002)
- NIO(New I/O):引入了通道(Channel)和缓冲区(Buffer),支持高效的I/O操作,改进了文件和网络数据传输的性能。
- 正则表达式:通过java.util.regex包提供了正则表达式的支持,简化了复杂字符串处理的操作。
- Logging API:通过java.util.logging包提供了标准化的日志记录机制,用于记录和管理日志信息。
- 断言:引入了断言机制,用于程序的调试和验证,通过assert关键字支持断言条件。
- XML处理:增强了对XML文档的支持,包括对SAX(Simple API for XML)和DOM(Document Object Model)解析器的改进。
- JDK 5 (2004)
- 泛型(Generics):提供了类型安全的集合操作,避免了类型转换错误,通过<>符号进行泛型定义。
- 注解(Annotations):允许在代码中添加元数据,用于代码生成、文档生成或编译时检查,使用@符号进行定义。
- 枚举(Enums):引入了枚举类型,提供了更强的类型安全和代码的可读性。
- 增强型for循环:简化了对集合和数组的遍历,使用for-each语法。
- 可变参数(Varargs):允许方法接受不定数量的参数,通过...语法简化了方法调用和参数传递。
- JDK 6 (2006)
- 性能改进:包括对JVM性能的提升,优化了Java编译器和垃圾回收机制。
- 脚本语言支持(JSR 223):通过javax.script API支持脚本语言(如JavaScript),增强了与动态语言的集成能力。
- 编译器API:提供了javax.tools包,用于访问Java编译器,支持代码分析和处理。
- 改进的Javadoc:生成更丰富的文档和API说明,改进了Javadoc工具的功能。
- JDK 7 (2011)
- 钻石操作符:简化了泛型实例化,通过<>符号推断泛型类型,减少了类型声明的重复。
- try-with-resources:简化了资源管理,自动关闭实现了AutoCloseable接口的资源(如文件、数据库连接)。
- 多重捕获:允许在一个catch块中捕获多个异常类型,减少了重复代码。
- 改进的NIO2:引入了Path类和文件系统API的增强功能,支持异步文件I/O操作。
- 字面量改进:在数字字面量中支持使用下划线,提高了代码的可读性。
- JDK 8 (2014)
- Lambda表达式:引入了函数式编程的概念,允许使用->语法简化对集合操作的表示。
- Streams API:提供了函数式风格的集合处理,支持顺序和并行流操作,通过Stream接口处理数据流。
- Optional类:用于处理可能为空的值,避免null引发的空指针异常,提供了更安全的空值处理方式。
- 新的日期和时间API:引入了java.time包,提供了全面的日期时间处理功能,替代了老旧的java.util.Date和java.util.Calendar类。
- 默认方法:接口可以包含默认实现的方法,允许接口增加新方法而不影响实现类。
- Nashorn JavaScript引擎:替代了Rhino引擎,提供了更高效的JavaScript执行性能。
- JDK 9 (2017)
- 模块系统(JPMS):引入Java平台模块系统,通过module-info.java文件将应用程序和JDK划分为模块,改进了模块化管理和依赖管理。
- JShell:提供了交互式Java命令行工具,用于即时执行Java代码,支持快速实验和调试。
- 增强的Javadoc:改进了Javadoc工具,生成更友好的文档输出,支持HTML5。
- Stack-Walking API:提供了高效的堆栈遍历API,支持更灵活的堆栈操作和性能监控。
- JDK 10 (2018)
- 局部变量类型推断:引入var关键字,简化了局部变量的声明,通过类型推断自动确定变量类型。
- G1 GC改进:进一步优化了G1垃圾回收器,减少了垃圾回收的停顿时间,提高了性能。
- 应用类数据共享(AppCDS):允许共享类元数据,提升了启动性能并减少了内存消耗。
- 并发性改进:优化了多线程和并发操作的性能,提高了程序的响应速度和稳定性。
- JDK 11 (2018)
- LTS(长期支持)版本:提供了长期的支持和稳定性,适用于企业和生产环境。
- 新的字符串方法:如isBlank(检查字符串是否为空白)、lines(按行拆分字符串)、strip(去除前后空白)等,改进了字符串处理能力。
- HTTP客户端API:提供了标准的HTTP客户端API,支持同步和异步HTTP请求,简化了网络编程。
- 移除的模块:移除了Java EE和CORBA模块,简化了JDK,减少了不再使用的功能。
- ZGC(Z Garbage Collector):实验性垃圾回收器,旨在提供低延迟和高性能的垃圾回收,支持大内存应用的高效回收。
- JDK 12 (2019)
- JVM常量动态:增强了JVM对动态常量的支持,改进了对语言和平台扩展的处理。
- Shenandoah GC:引入了低延迟垃圾回收器,旨在减少垃圾回收的停顿时间。
- 切换表达式(Preview):引入了更强大的switch表达式,通过->符号支持更简洁的多分支语法。
- 改进的NullPointerException:增强了异常信息,提供更详细的空指针异常报告,便于调试。
- JDK 13 (2019)
- 文本块(Preview):引入多行字符串文字(Text Blocks),简化了多行字符串的书写和维护。
- 动态类文件常量:提供了更灵活的类文件常量支持,优化了类文件的处理方式。
- 改进的ZGC:增强了ZGC的功能,提高了性能和稳定性。
- JDK 14 (2020)
- 记录类(Records)(Preview):引入记录类,用于简化数据承载类的定义,减少样板代码。
- 封闭类(Sealed Classes)(Preview):支持限制类的继承,提供更严格的类层次结构控制。
- NVM(Non-Volatile Memory)支持:提供了对非易失性内存的改进支持,增强了JVM对新型内存技术的兼容性。
- JDK 15 (2020)
- 文本块(正式发布):文本块功能正式发布,提供了多行字符串的支持,简化了文本处理。
- ZGC(正式发布):ZGC垃圾回收器正式发布,提供低延迟垃圾回收的标准支持。
- 密封类(Sealed Classes)(正式发布):密封类功能正式发布,允许限制类继承的范围,提供更严格的类型安全。
- JDK 16 (2021)
- 记录类(正式发布):记录类功能正式发布,简化了数据承载类的定义。
- JEP 394:移除了Solaris和SPARC平台的支持,简化了JDK的维护。
- JEP 395:对Unix域套接字(Unix Domain Sockets)的支持,增强了网络编程能力。
- JDK 17 (2021)
- LTS(长期支持)版本:提供了长期支持,适用于生产环境和企业级应用。
- Pattern Matching for switch(Preview):增强了switch表达式的模式匹配功能,提高了代码的灵活性。
- Sealed Classes(正式发布):密封类功能正式发布,提供了更严格的继承控制。
- JDK 18 (2022)
- Unicode 14.0:更新了对Unicode 14.0标准的支持,改进了字符集和符号的处理。
- Code Snippets in Javadoc:支持在Javadoc中嵌入代码片段,提高了文档的可读性和实用性。
- Vector API(Incubator):引入了向量化操作的API,用于高性能的计算任务,提升了性能。
- JDK 19 (2022)
- Pattern Matching for switch(正式发布):模式匹配功能正式发布,提高了switch表达式的灵活性。
- Record Patterns(Preview):引入记录模式,用于简化解构记录类的代码,增强了数据访问能力。
- Virtual Threads(Preview):引入虚拟线程,用于简化并发编程,提高了并发处理的效率。
- JDK 20 (2023)
- Foreign Function & Memory API(Incubator):引入对本地函数和内存的API支持,增强了与非Java代码的交互能力。
- Pattern Matching for Switch(Final):模式匹配功能正式发布,进一步提高了switch表达式的使用体验。
- Scoped Values(Incubator):支持作用域值,用于简化和提高跨线程数据的管理和共享能力。
- JDK 21 (2023)
- LTS(长期支持)版本:提供了长期支持,为生产环境提供稳定性和支持。
- Record Patterns(正式发布):记录模式功能正式发布,进一步简化数据解构操作。
- Virtual Threads(正式发布):虚拟线程功能正式发布,提升了并发编程的能力和性能。
- JDK 22 (2024)
- 继续优化虚拟线程:进一步提升虚拟线程的性能和功能,支持更复杂的并发模式。
- 增强型垃圾回收:改进了垃圾回收算法,进一步提高了内存管理的效率。
- 新特性:包括对最新语言特性的支持和性能优化,保持对现代编程需求的适应。
这些版本逐步推进了Java平台的功能和性能,为开发者提供了更强大和灵活的工具。