Java最初是由Sun Microsystems发明的一种编程语言(Sun在2010年1月被Oracle收购)。 自从Java发明以来,它已经不仅仅是一种语言。它也是一个拥有一套标准API和标准工具的平台。本教程的下一篇文章将更详细地介绍Java到底演变成了什么,即关于Java的今天。
这个Java教程的线索(一组文章)描述了Java编程语言。本教程的意图主要是为那些已经对编程和面向对象的概念有一定了解的开发人员压缩介绍Java。我将尝试在使用时解释各种不同的概念,但有一点编程背景会有帮助。
这个Java教程的目标受众既包括几乎需要从头开始学习Java的初学者,也包括只需要补习一下他们没有使用过的功能的更有经验的开发者。
Java教程视频
我也制作了一些关于Java相关主题的视频。你可以在这里找到它们。
- 我喜欢Java的7+2件事
- Java集合(9个视频)
- Java 并发(20个视频)
涵盖的Java主题
这个Java教程涵盖了以下Java主题。
- 什么是Java?
- 安装Java SDK
- 你的第一个Java应用程序
- Java的main()方法
- Java项目概述、编译和执行
- Java的核心概念
- Java 语法
- Java变量
- Java数据类型
- Java数学运算符和数学类
- 爪哇数组
- 爪哇字符串
- 爪哇操作
- 爪哇的if语句
- Java 三元运算符
- Java switch 语句
- 爪哇的实例运算符
- Java for 循环
- Java while 循环
- 爪哇类
- 爪哇字段
- 爪哇方法
- 爪哇构造器
- 爪哇包
- 爪哇访问修改器
- 爪哇的继承性
- 爪哇的嵌套类
- 爪哇抽象类
- Java 接口
- Java接口与抽象类
- 枚举
- Java注解
- Java Lambda表达式
- Java记录
- Java模块
- 习题
涵盖的Java APIs
整个Java平台不仅仅由上一节中列出的语言概念组成。 Java平台包含了一大批你可以使用的现成组件。这些组件被组织成不同的API(应用程序编程接口),每个API都涉及一个特定的功能领域。 这个Java教程(上面和左边菜单中列出的文章)只涵盖了Java语言特性。 Java API在它们自己的教程系列中涵盖。下面是一个包含大多数Java APIs的列表。
| API | 描述 |
|---|---|
| Java集合 | 包含处理集合、列表、堆栈、队列等的功能。 |
| Java 并发 | 解释基本的Java多线程工具,如线程和同步块,以及与并发性有关的理论。 |
| Java 并发实用程序 | 解释java.util.concurrent包中的Java并发实用程序。 |
| Java 密码学 | 包含用于处理加密和解密的功能。 |
| Java 日期时间 | 解释用于处理日期和时间的Java日期和时间API。 |
| Java 异常处理 | 解释Java异常处理的工作原理,以及围绕异常处理的各种提示和技巧。 |
| Java 泛型技术 | 解释Java泛型,它能在实例化时为一个给定的组件设置一个 "泛型"。例如,创建一个字符串对象的列表。 |
| Java 国际化 | 介绍Java国际化API,它可以帮助你的应用程序适应不同国家的标准和语言。 |
| Java IO | 涵盖Java IO APIs,使你能够从文件和其他外部来源读写数据。 |
| Java JDBC | 涵盖Java JDBC API,它使您的Java应用程序能够连接到关系数据库。 |
| Java JSON | 涵盖了在Java中处理JSON的各种Java API--例如,将Java对象序列化为JSON,反之亦然。 |
| Java 日志 | 解释用于将数据记录到日志文件的Java Logging APIs。 |
| Java 网络 | 解释Java Networking API,它使您能够与其他计算机进行网络连接。 |
| Java NIO | 解释Java NIO (New IO / Nonblocking IO) API,它为Java提供一个非阻塞的IO API。 |
| Java 反射 | 解释Java Reflection API,它使你能够在运行时以编程方式检查类和对象。 |
| Java 正则表达式 | Java正则表达式API(Regex)。 |
| Java XML APIs | 解释Java XML处理API。 |
| Java ZIP APIs | 解释Java Zip压缩和解压缩API。 |
| Java JavaFX | 解释用于开发Java桌面应用程序的强大而流行的JavaFX API。 |
本教程中涉及的Java版本
Java语言和平台在不断发展。现在大约每6个月就会有新的Java版本发布。我将以最快的速度更新本教程的最新功能。
这个特别的教程只涵盖核心的Java语言功能。许多Java APIs在本教程网站的其他地方都有介绍。
如果你只是想了解每个Java版本的新功能,下面的章节将列出最新Java版本的主要新增功能。
Java 18中的新内容
Java 18的主要新增内容有。
- 废弃最终确定,用于删除
- 互联网地址解析SPI
- 开关的模式匹配--第二次预览
- 使用方法句柄重新实现了核心反射
- 小型、简单的网络服务器能够只提供静态内容
- 外来存储器API(第二孵化器)
- 矢量API(第三孵化器)
- 将UTF-8作为Java APIs的标准字符集
- 通过@snippet标签在JavaDoc注释中提供代码片段
Java 17中的新内容
Java 17的主要新增内容有
- 恢复了始终严格的浮点语义。
- 增强的伪随机数生成器
- 新的MacOS渲染管道
- macOS/AArch64端口
- 废弃了Applet API的移除功能
- 强烈封装JDK内部结构
- 开关的模式匹配
- 移除RMI激活
- 封闭类
- 移除实验性AOT和JIT编译器
- 移除SecurityManager的废弃版本
- 外来函数和内存API(孵化器)
- 用于SIMD指令访问的向量API(第二孵化器)
- 特定上下文的反序列化过滤器
Java 16中的新内容
Java 16的主要新增内容是。
- 打包工具,用于从您的Java应用程序中为Windows、Mac和Linux生成本地安装程序。
- 对Java Stream API的改进。
- Java记录已经脱离了预览,现在是一个永久性的功能。
- 矢量API(孵化器状态)--用于访问底层硬件的CPU SIMD操作。
- ZGC并发线程栈处理。
- Unix-Domain Socket Channels。
- 外国链接器API(孵化器)。
- 国外内存访问API(第三孵化器)。
- 通过Java Reflection Proxy对象调用默认方法。
instanceof操作符的模式匹配已经脱离了预览,现在是一个永久的功能。- 封闭类在第二次预览中。
Java 15中的新内容
Java 15的主要新增内容是。
- 封闭类(预览)
- 隐藏类
- Edwards-Curve数字签名算法(EdDSA)。
- 重新实现了传统的DatagramSocket API
- instanceof的模式匹配(第二次预览)
- 记录(第二次预览)
- 外来内存访问API(第二批孵化器)
- 文本块
- ZGC:一个可扩展的低延迟垃圾收集器
- Shenandoah。一个低暂停时间的垃圾收集器
- 禁用和废止偏向性锁定
- 删除了Nashorn JavaScript引擎
- 删除了Solaris和Sparc端口
- 废弃了RMI激活的移除功能
Java 14中的新内容
Java 14的主要新增内容有。
- 记录- 浅层不可变的类(预览)。
- NullPointerException的改进。
- 文本块--使声明多行字符串变得更容易。
- Java开关表达式成为一个永久性的功能。
- 增强了Java instanceof操作符的模式匹配。
- 通过FileChannel API的非易失性内存映射的字节缓冲区。
- 外来内存访问API,以访问Java VM堆之外的内存。
- G1垃圾收集器的NUMA感知内存分配。
- Java Flight Recorder - 事件流。
- 一个打包工具,用于将Java应用程序打包成独立的应用程序。
- 将Z垃圾收集器(ZGC)移植到MacOS和Windows上
- 移除并发标记和扫荡垃圾收集器。
- 移除JAR文件的pack200 / unpack200 zip工具。
- 废弃了Solaris/Sparc、Solaris/x64和Linux/Sparc的Java端口。
Java 13中的新内容
Java 13的主要新增内容有。
- 对Java开关表达式进行了修改--与Java 12不是100%向后兼容。
- 文本块 - 使得声明多行字符串变得更容易。
- 重新实现了传统的Socket API。新的实现更简洁,而且应该能更好地与用户空间线程一起工作--例如纤维--正在Project Loom(未来可能加入Java)中进行探索。
- Z垃圾收集器现在将未使用的内存释放回操作系统,如果未使用的时间较长的话。
Java 12中的新功能
Java 12的主要新增内容是。
- 一个叫Shenandoah的低暂停时间垃圾收集器(仅OpenJDK)。
- Java开关表达式(预览--可能会再次从Java中删除)。
- JVM常量API。
- G1中可中止的混合收集(垃圾收集)。
- 从G1中及时返回未使用的承诺内存。
Java 11中的新内容
Java 11的主要新增内容有。
- 从JDK中删除了Java EE和Corba模块。
- HTTP客户端成为标准(Java 9中加入的)。
- Java
var关键字允许作为lambda表达式的参数类型。 - 通过椭圆曲线加密法进行密钥协议。
- Unicode 10。
- 新的密码学算法。
- 启动单文件源代码程序(执行时编译)。
- 支持TLS 1.3。
- 废弃Nashorn JavaScript引擎
Java 10中的新内容
Java 10的主要新增内容有。
- 本地变量类型推理
- G1(一个垃圾收集器)的并行全垃圾收集器
- 包括Graal作为实验性的JIT编译器
- 一些内部、JVM和平台层面的变化
Java 9中的新内容
Java 9的主要新增内容有。
Java 8中的新内容
Java 8的主要新增内容有。
- Java Lambda表达式
- Java Streams(功能流)
- JavaFX(从Java 8开始与Java SE捆绑)。
- Nashorn JavaScript引擎。
Java 7中的新功能
Java 7中的主要新特性是。
- 用资源进行尝试
- 捕获多个异常
- 通过ForkJoinPool的Java分叉和联合
- Java开关语句中的字符串
- Java NIO 2.0中的新文件系统API
- 泛型声明中的类型推理(所谓的 "钻石 "运算符)。
- 用下划线作为视觉分隔符的数字字面(例如1_000_000)。
- 二进制数字字头(例如:0b10100101)。
- 支持Java虚拟机(JVM)中的动态类型语言。
开始学习Java
本页只是对Java教程线索的一个介绍。真正的讲解是从该教程的下一篇文章(页)开始的,即《什么是Java?你可以在每一页的左上方看到本教程中的所有文章。
在你阅读教程的过程中,我建议你玩一玩代码实例等。就我个人而言,当我键入实例并运行它们时,我学得更好。为了做到这一点,你需要。
- 编写Java代码
- 编译Java代码
- 执行编译后的Java代码
安装一个IDE
完成这三个步骤的最简单方法是使用Java IDE(集成开发环境)。你可以在IDE中编辑Java代码、编译和执行它。目前有三种流行的Java IDE。
Eclipse和Netbeans都是免费的,IntelliJ IDEA有一个免费的社区版,在你开始学习Java的时候就可以了。我个人使用IntelliJ IDEA,但我不时地使用这三个IDE。所有这些对你来说都是不错的开始。
如果你不想要一个完整的IDE,你可以在一个标准的文本编辑器中写Java代码,比如记事本(在Windows上)或记事本++(免费文本编辑器)。Java文件名必须以.java 为扩展名。然后你可以将Java文件编译成Java字节码,并使用java 命令来运行编译后的字节码。
安装一个Java SDK
为了以这种方式编译和执行Java代码,你需要下载并安装Java SDK(Java软件开发工具包)。你有两个选择。你可以下载Oracle Java SDK,或者Open JDK。从Java的角度来看,它们在功能上是等同的,但在内部的垃圾收集器实现上有一些区别。我通常使用Open JDK版本的Java SDK。
你需要弄清楚你想使用哪个版本的Java。通常情况下,人们倾向于使用他们公司使用的版本,或最新的长期支持版本(LTS),或最新的版本。你甚至可能想安装一个以上的Java SDK,以防你想玩新版本的新功能。 只要在网上搜索 "Oracle Java SDK下载 "或 "Open JDK下载",你就能找到下载Java的页面。如果你想下载特定版本的Java SDK,或许可以在搜索中加入版本号。
请随时与我联系
如果你不同意我在这个Java教程中写的任何东西,或者只是有意见、问题等,欢迎给我发电子邮件。你不会是第一个这样做的人,你可以在 "关于 "页面上找到我的电子邮件地址。