1 Java概述
1.1 Java发展历史
1990年末SUN(Stanford University Network)公司预料嵌入式系统将在未来的家用电器领域大显身手,于是SUN公司成立了由James Gosling领导的Green计划,准备为下一代智能家电(电视机、微波炉、电话)编写一个通用的控制系统。
一开始该团队决定使用C++语言,但是当时的C++不支持跨平台。因为不同的家电设备所使用的芯片不同,更换了家电设备则需要修改程序。
因此James Gosling在C++的基础之上重新开发一门语言-Oak,后来因为智能家电的市场需求没有预期的那么高,SUN公司放弃了该计划。
随着20世纪90年代中后期互联网的发展,SUN公司发现了Oak在互联网上的应用前景,于是改造Oak语言,并在1995年5月以Java(印度尼西亚爪哇岛)的名称正式发布。
互联网的特点和家电设备的特点类似:不同的计算机所使用的硬件设备(芯片)不同。
当时业界为了使得死板、单调的静态网页能够灵活起来,急需要用一种技术开发动态网页,这种程序可以通过互联网访问,还能够跨平台。得益于Java的跨平台,而且可以制作Applet逐渐流行起来,Applet是一种将小程序嵌入到网页中执行的技术。
伴随着互联网的高速发展,以及凭借自身强大的生态体系,目前Java已经成为Web应用程序的首选开发语言。
发行版本 | 发行时间 | 备注 |
---|---|---|
Java1.0 | 1996/01/23 | SUN公司发布了Java的第一个开发工具包 |
Java1.1 | 1997/02/19 | JavaOne会议召开,创造当时全球同类会议之最 |
Java1.2 | 1998/12/08 | Java拆分成:J2SE(Java标准版),J2EE(Java企业版),J2ME(Java微型版) |
Java1.3 | 2000/05/08 | HotSpot 成为默认虚拟机 |
Java1.4 | 2002/02/06 | |
Java5.0 | 2004/09/30 | ①版本号从1.4直接升级到5.0 ②Java平台更名为JavaSE、JavaEE、JavaME |
Java6 | 2006/12/11 | 2009/04/20 Oracle公司用74亿美金收购SUN公司 |
Java7 | 2011/07/02 | Oracle公司收购SUN公司后发布第一个Java版本 |
Java8 | 2014/03/18 | 此版本是Java5.0以来最大变化的版本,是长期支持版本(LTS) |
Java9 | 2017/09/22 | ①从此版本开始每半年更新一次 ② Java9.0开始不支持32位系统 |
Java10 | 2018/03/21 | 非长期支持版本 |
Java11 | 2018/09/25 | JDK安装包取消独立JRE安装包,是长期支持版本(LTS) |
Java12 | 2019/03/19 | 非长期支持版本 |
Java13 | 2019/09/17 | 非长期支持版本 |
Java14 | 2020/03/17 | 非长期支持版本 |
Java15 | 2020/09/15 | 非长期支持版本 |
Java16 | 2021/03/16 | 非长期支持版本 |
Java17 | 2021/09/14 | 长期支持版本,版本号也被称为21.9 |
Java18 | 2022/03/22 | 非长期支持版本 |
Java19 | 2022/09/20 | 非长期支持版本 |
Java20 | 2023/03/21 | 非长期支持版本 |
Java21 | 2023/09/19 | 目前最新长期支持版本 |
Java22 | 2024/03/19 | 非长期支持版本 |
Java23 | 2024/09 | 非长期支持版本 |
每个新版本JDK发布都会提供一些新特性(新功能)以及改进或者废弃原有功能
注意事项
- Java5和JDK1.5指的是同一个版本,Java8和JDK1.8指的是同一个版本
- Java7以后Java由Oracle公司发布
- Java8仍然是目前主流互联网公司使用的版本
- Java9以后每半年发布一个版本,每2-3年发布一个长期支持版本(LTS),例如Java8,Java11,Java17,Java21是长期支持版本。
1.2 Java 技术体系平台(Java 三大版本)
自从1998年以后Java被分成了三个版本,这三个版本分别是JavaSE、JavaEE(JakartaEE)、JavaME,每个版本都是有自己的应用场景(开发方向))
- JavaSE(Java Standard Edition):Java标准版,主要是用于桌面应用的开发,不过目前绝大多数的桌面应用都是使用C/C++开发,很少使用Java开发桌面应用(IntelliJ IDEA),JavaSE是其他两个版本(JavaEE,JavaME)的基础,学习JavaSE是为了以后从事JavaEE开发打基础(锻炼逻辑思维能力)。
- JavaEE(Java Enterprise Edition):Java企业版,主要是用于开发大型企业应用的后台,JavaEE在这个领域是No.1,所谓的企业应用就是那些商业组织、大型企业创建的应用,例如阿里巴巴的淘宝、天猫、菜鸟物流,蚂蚁的支付宝等等大型企业应用的后台都是基于JavaEE技术栈实现的。
- JavaME(Java Micro Edition):Java微型版,主要用于嵌入式电子设备(电视机、电冰箱、微波炉、烤箱)或者小型移动设备(诺基亚手机)应用开发,但是随着3G移动智能平台(Android,iOS)的时代到来,特别是以Java为核心编程语言的Android平台的快速普及,JavaME已经淘汰。
如果去招聘网站搜索JavaME会发现搜索不到对应的岗位
JavaSE、JavaEE(JakartaEE)、JavaME三者之间的关系
1.3 Java 特点
由于Java语言是开源的,也得到了很多大公司的支持(Oracle,Amazon,Google,Alibaba、Tencent、Huawei)的支持,逐渐发展成了具有简单易学、开源、跨平台(可移植)、体系结构中立、安全性、高性能、健壮型、支持面向对象、多线程、分布式、动态性等诸多特点的开发平台和运行平台。
-
Java是简单易学:Java是C/C++的基础之上发展而来,不同于C/C++的是Java是纯粹的面向对象的语言,Java舍弃了C语言中特别容易引起错误的指针,并且引入了垃圾回收机制,这样在大部分场景下不需要手动释放内存,而且Java还舍弃了C++语言中一些特别复杂的语法,例如头文件、指针运算、结构、联合、运算符重载、多继承、虚基类等等。同时由于语法是基于C语言,因此Java相比C/C++更加简单易学
-
Java是开源的:开源指的就是开放源代码,例如QQ、微信是不开源的,在下载QQ时只能下载安装包而不能获取源代码,而Linux、Visual Studio Code等等都是开源的,在下载Linux、Visual Studio Code时不仅可以下载安装包还可以下载源码,Java开源的好处就是开发者可以通过阅读Java语言以及相关框架、中间件的源码查看具体的设计、实现过程,从而提高自己的技术水平。在Java世界中,有着数不清的开源软件和框架。如Tomcat、Mybatis、Spring Framework、Spring Boot、Spring Cloud、Spring Cloud Alibaba、Dubbo,Netty,等。就连JDK自身也有不少实现,如Amazon Corretto、Azul Zulu Community等等。
-
Java是跨平台的:平台就是操作系统(OS),目前桌面端主流操作系统是Windows,macOS,服务端操作系统是Linux(CentOS,Ubuntu Server)。跨平台的含义就是在Windows上开发的项目不需要做任何修改就可以直接在其他安装了JDK的操作系统(CentOS,Ubuntu Server)上运行,不同操作系统有不同版本的JDK,用来屏蔽底层操作系统的差异。
跨平台的好处就是节省人力资源成本,因为项目开发一次后适配多个操作系统。在公司开发项目时,首先会在开发环境中开发Java项目,项目开发完成以后部署到测试环境中进行相关测试,测试通过以后部署到生产环境中对外提供服务。不同的环境操作系统也是不一样的,开发环境使用的Windows或者macOS开发Java项目,测试环境和生产环境使用的Linux来测试Java项目或者部署Java项目对外提供服务。
- Java是体系结构中立,体系结构中立有两层含义,①JVM的实现只需要遵守Oracle官方提供的JVM规范即可,不过大部分Java应用都是使用的Oracle官方提供的HotSpot虚拟机,除此以外一些互联网大厂(Alibaba、Tencent、Huawei)会根据自己的需求定制JDK。②JVM除了可以识别Java编译器(javac)编译生成的字节码文件以外,还可以识别Groovy、Scala、 JRuby、Kotlin等计算机语言生成的字节码文件。
1.4 JDK 和 JRE
1.4.1 JDK 和 JRE 介绍
- JDK(Java Development Kit) 称为Java开发工具集,JDK包含了Java开发工具(javac,java,jdb,jconsole等等)以及JRE,如果想要开发Java程序之前首先必须安装和配置JDK
- JRE(Java Runtime Enviroment)称为Java运行时环境,JRE包含了运行Java程序所需要的类库(数学、集合、正则表达式、日志、并发、反射、序列化、网络、日期时间、IO、JDBC)和JVM(Java Virtual Machine),如果想要运行已经开发好的Java程序之前必须要安装JRE,但是Java11以后不再提供单独的JRE下载。
Java8体系结构
1.4.2 图解JDK、JRE和JVM的关系
1.4.3 如何选择 Java 版本
首先需要了解下Oracle Java SE Support Roadmap
从Java 9开始,Oracle决定每六个月发布一个新的LTS(长期支持)版本或非LTS版本。这意味着每年的3月和9月会有新版本发布。
- LTS表示Oracle官方长期支持的版本,Oracle提供长达8年的支持,包括免费的公共更新持续到发布后的两年,之后则需要购买商业支持服务才能继续获得更新和补丁。,例如Java11,Java17,Java21,Java25,其中Java17官方支持到2029年9月,Java21 官方支持到 2031 年 9 月。
- non-LTS表示非Oracle官方长期支持的版本(测试版),非LTS版本的支持周期较短,主要为开发者提供最新的特性和改进,但不建议用于生产环境,除非你计划频繁升级,例如Java9,Java10,Java12,Java13,Java14,Java15,Java16,Java18,Java19,Java20,Java22等等都是non-LTS版本
尽管Java的发展速度加快,但Oracle承诺保持语言和平台的向后兼容性,确保现有的应用程序可以在新的版本上运行。
选择JDK版本的时候分两种情况
- 学习Java的时候可以选择高版本的JDK,但是必须是LTS版本,例如Java17,Java21
- 去公司开发Java项目的时候,① 公司已有的项目用什么JDK版本,那么你就优先使用什么JDK版本,② 公司从0开始开发项目,那么优先选择稳定而且是官方长期支持的版本,例如Java8或者Java17,目前国内大部分的互联网公司现有的Java项目依然使用Java8,未来(2-3年以后)会逐步升级到Java17 或者 Java21,一些开源框架依赖的JDK也从Java8已经升级到Java17,例如Spring Framework 6,Spring Boot 3 等等。
1.5 常见 JDK 发行版
Oracle JDK只是Oracle公司的一种JDK具体实现,其他企业和个人可以根据开源的 OpenJDK开发和定制JDK。
常见的JDK发行版
- Oracle JDK
- Oracle JDK是Oracle公司提供的官方JDK实现,基于HotSpot虚拟机
- Oracle JDK是Java标准版(Java SE)的参考实现,通常被视为最完整和最稳定的JDK版本。
- 它包含了商业特性,如Java Flight Recorder和Java Mission Control,适用于性能分析和故障排查。
Oracle Java archive归档了所有Java版本
在2019年以后Java8后续更新的版本 就开始收费,但是主要针对的是企业用户,对于个人学习没有任何影响。
Java SE 8 (8u202 and earlier)在生产环境商用是可以免费使用
Java SE 8 (8u211 and later)在生产环境商用是需要付费使用
- OpenJDK
- OpenJDK是一个开源的JDK实现,由Oracle和其他组织共同维护。
- 它是Oracle JDK的基础,两者在功能上非常相似,但OpenJDK不包含Oracle JDK中的一些专有组件。
- OpenJDK是很多其他JDK实现的基石,如AdoptOpenJDK和Amazon Corretto。
- Eclipse Temurin
- 由社区驱动的项目,提供高质量的OpenJDK二进制文件。
- 提供了多种OpenJDK版本和HotSpot JVM变体,包括OpenJ9和Eclipse OpenJ9。
- 其二进制文件经过严格测试,确保跨平台的兼容性和稳定性。
- Amazon Corretto
- Amazon公司提供的OpenJDK版本,免费且生产就绪。
- 提供长期支持和定期更新,包括安全修复和性能改进。
- 特别适合在Amazon Web Services (AWS) 上运行的Java应用程序。
- Azul Zulu
- Azul Systems公司提供的OpenJDK版本,免费且生产就绪。
- 提供长期支持和定期更新,强调性能和可扩展性。
- 最稳定、最安全的 OpenJDK 版本
- GraalVM
- GraalVM是一个高性能的JVM实现,支持多种语言和运行时环境。
- 它可以作为JDK使用,提供了AOT编译能力,支持原生镜像构建,适合微服务和云原生环境。
- BellSoft Liberica JDK
- BellSoft公司提供的开源JDK实现,基于OpenJDK,开源免费。
- 提供了广泛的平台支持和长期支持版本。
- 包含 JavaFX
- 阿里巴巴 Dragonwell JDK
- 阿里巴巴发布的JDK,称为Dragonwell JDK,它是基于OpenJDK的定制版本。
- Dragonwell JDK旨在解决阿里巴巴集团在大规模部署Java应用程序时遇到的性能和稳定性问题。
- 它包含了对高并发场景下的优化,以及对阿里巴巴内部使用模式的特殊调优。
- 腾讯 Kona JDK
- 腾讯的Kona JDK也是基于OpenJDK构建的,提供了长期支持(LTS)并定期更新。
- Kona JDK作为腾讯内部的默认JDK应用于其云业务和其他Java应用场景。
- 它通常会包含腾讯专业JVM技术团队的额外功能和性能优化。
- 华为毕昇JDK
- 毕昇JDK是华为内部基于OpenJDK定制的Huawei JDK的开源版本。Huawei JDK运行在华为内部500多个产品上,研发团队积累了丰富的开发经验,解决了业务实际运行中遇到的多个疑难问题。
- 毕昇JDK作为OpenJDK的下游,是一款高性能、可用于生产环境的OpenJDK发行版。毕昇JDK对华为内部应用场景中遇到的一些性能问题和稳定性问题进行了修复,并在ARM架构上进行了性能优化和稳定性增强,在ARM架构上更稳定,在大数据等场景下可以获得更好的性能。
- 毕昇JDK致力于为JAVA开发者提供一款稳定可靠、高性能、易调测的JDK,也为用户在ARM架构上提供一个更好的选择。
- Microsoft OpenJDK
- Microsoft OpenJDK 是由微软公司提供的一款基于标准 OpenJDK 项目构建的 Java 开发工具包 (JDK) 和运行时环境 (JRE)。它遵循 GPL v2 with Classpath Exception 的开源许可证,旨在为开发者和企业提供一个稳定、高性能且兼容标准 Java 规范的运行时环境。
- 开源与免费:与所有 OpenJDK 发行版一样,Microsoft OpenJDK 是完全开源的,可供任何人免费使用。
- 跨平台支持:它支持 Windows、macOS 和 Linux 操作系统,使得 Java 开发者可以在多个平台上无缝切换和部署应用。
- 质量保证:微软在 OpenJDK 的基础上进行额外的测试和质量控制,确保其稳定性和性能达到企业级标准。
- 长期支持(LTS):Microsoft 提供长期支持版本,这意味着用户可以期待持续的安全更新和 bug 修复,对于需要长期维护的项目尤为重要。
- 商业支持:微软为需要的企业用户提供商业级别的支持服务,包括技术支持和保修服务,这对于企业级应用的稳定性保障非常关键。
- 安装与管理简便:Microsoft OpenJDK 可以通过多种方式轻松安装,例如在 Windows 上可以使用 Windows Package Manager (winget) 安装,简化了开发者的设置过程。
2 Windows版Java8开发环境搭建
2.1 Windows版本Java8下载
- 访问Java的官网,其访问地址是https://www.oracle.com/java/
- 点击右上角的Download Java,跳转到Java的下载页面
Java的下载地址是https://www.oracle.com/java/technologies/downloads/
目前(2024/08/09)Oracle官方提供最新可用的Java版本(JDK版本)是Java22、Java21 和Java17,最新的LTS版本是Java21
本次我们下载的是Java8,所以往下滚动鼠标到Java8的下载
目前Java8支持四个操作系统
- Linux
- macOS
- Solaris
- Windows
大家在下载Java8的时候需要根据自己所使用操作系统的版本选择对应版本的Java8
- 选择Windows版 Java8 x64 Installer
Q:如何知道使用Windows版本
A:在设置(Windows+I)>系统>系统信息查看设备规格和Windows规格
由于本机使用的操作系统是 64 位 Windows11专业工作站版 23H2 ,因此选择Windows x64 Installer 的jdk-8u421-windows-x64.exe
- x86 Installer 表示32位Java8安装程序
- x64 Installer 表示64位Java8安装程序
选择32位还是64位是根据系统类型来决定的,强制要求开发者全部使用64位系统,因为32位系统最多只能使用4GB内存,现在从事软件开发4GB内存肯定是不够用的。
- 下载Windows版 Java8 x64 Installer
- 注册、登录Oracle账户
如果没有Oracle账户,大家可以在注册页面填写相应的信息注册Oracle账户
账户创建成功以后,在登录页面填写账户信息(账号、密码)登录Oracle账户
登录成功之后浏览器会下载Java8,使用快捷键 Ctrl+J 可以打开下载记录
点击更多操作
下载未经验证的文件
此时查看下载的速度以及所需的时间
当Java8下载完成后,点击在文件夹中显示
默认在下载目录(C:\Users\liuguanglei\Downloads)下会看到Java8的安装包jdk-8u421-windows-x64.exe
2.2 Windows版Java8安装
2.2.1 Windows版Java8安装过程
- 左键双击Windows版Java8的安装包jdk-8u421-windows-x64.exe启动安装器
在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗?选择是即可
- 下一步
- 定制安装
安装组件默认情况下包含了开发工具、源代码和公共JRE
安装路径默认情况下是 C:\Program Files\Java\jdk-1.8
由于JDK中包含了JRE,因此无需再安装公共JRE
因此选择公共JRE,设置成此功能将不可用
只需要安装开发工具和源代码即可
- 点击下一步
开始安装,稍等片刻即可安装完成
- 安装成功
安装完成后可以点击 ①后续步骤 和 ②关闭
- 后续步骤:跳转到Java8的官方文档
- 关闭:关闭安装向导,完成Java8安装
2.2.2 Windows版Java8安装目录
Windows版Java8安装目录是C:\Program Files\Java\jdk-1.8
由于JDK包含了JRE,因此Java8目录中有个jre目录
作为Java初学者来说,目前只需要关注bin目录和src.zip压缩文件
- bin目录:存放Java提供的开发工具,例如javac,java,javadoc,javap 等等
- src.zip:存放Java源代码文件(.java结尾的文件)
该文件可以使用WinRAR解压缩,WinRAR需要下载、安装后才能使用
将src.zip文件解压到src
在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗?选择是即可
src 文件夹下存放的就是Java源代码
例如String.java
String.java源文件位于 java\lang 目录下
Visual Studio Code是一个跨平台的文本编辑器,需要下载、安装后才能使用
使用Visual Studio Code文本编辑器打开String.java
2.3 Windows版Java8配置JAVA_HOME环境变量
2.3.1 为什么Java8要配置JAVA_HOME环境变量
JAVA_HOME表示Java的安装路径,例如C:\Program Files\Java\jdk-1.8
后期我们会使用到Java开发的一些工具,例如Tomcat、Maven这些工具都会依赖JAVA_HOME环境变量。如果你不配置就无法正常使用,而且这些工具会提示你配置JAVA_HOME环境变量。
例如在终端位于Maven的bin目录下(D:\soft\java\apache-maven-3.9.8\bin)执行 mvn --version命令查看Maven版本信息时会提示需要配置JAVA_HOME环境变量
而只有安装Java并配置JAVA_HOME环境变量以后,重新开启终端后在终端位于Maven的bin目录下执行 mvn --version命令会输出Maven版本信息以及依赖的Java信息
2.3.2 Java8配置JAVA_HOME环境变量
- 打开系统属性面板
依次打开设置(Windows+I)>系统>系统信息
点击高级系统设置
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
环境变量分为用户变量和系统变量,二者的区别是作用范围不同
- 用户变量只针对当前用户有效
- 系统变量针对所有用户都有效
Windows电脑通常只有一个人使用,不太可能有多个用户,因此建议使用系统变量
- 配置Java8的JAVA_HOME环境变量
点击系统变量的新建(W),然后输入变量名和变量值
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk-1.8
- 依次点击三个确定,关闭系统属性面板,完成Java8的JAVA_HOME环境变量配置
- 验证Java8的JAVA_HOME环境变量配置是否成功
验证的方法就是启动一个终端,然后在终端输入echo %JAVA_HOME%,如果能够输出Java的安装路径表示配置成功
Q:如何启动终端
A:按Windows+R打开运行窗口
然后输入cmd后回车
就可以启动一个终端
在终端输入 echo %JAVA_HOME%并回车 验证JAVA_HOME环境变量是否配置成功
如果能够输出Java8的安装目录C:\Program Files\Java\jdk-1.8则表示配置成功
2.4 Windows 版 Java8 配置 Path 环境变量
2.4.1 Path 环境变量是什么
Path环境变量的变量名是Path,变量值就是一系列路径,例如%SystemRoot%,%SystemRoot%\system32等等,多个路径之间使用分号隔开。
Q:如何查看Path环境变量
A:在系统属性面板依次点击高级>环境变量>系统变量Path>编辑>编辑环境变量
- 打开系统属性面板
依次打开设置(Windows+I)>系统>系统信息
点击高级系统设置
然后会弹出系统属性面板
- 编辑系统环境变量
其中%SystemRoot%表示Windows系统根路径 C:\Windows
可以在终端上输入echo %SystemRoot%命令回车后查看
Path环境变量的作用就是当我们在终端上输入命令回车后,系统会从当前路径和Path环境变量指定的路径查找命令对应的可执行程序,然后执行程序。
当我们在终端上输入notepad命令回车后
系统会打开notepad对应的记事本程序
notepad命令对应的记事本程序路径是C:\Windows\notepad.exe
但是如果我们输入一个不存在的命令(例如notepadxxx),那么系统无法运行该命令对应的可执行程序,然后会提示 不是内部或外部命令,也不是可运行的程序或批处理文件。
2.4.2 Path 环境变量的使用
Q:如何实现在Windows终端的任意路径下输入QQ就可以启动QQ
A:将软件的安装路径配置到环境变量中,就可以在Windows终端的任意路径下打开指定的软件
说明:QQ测试版本: 9.9.15-26740 (64位)
- 找到QQ安装目录
先右键点击位于桌面的QQ快捷方式,然后右键选择属性
在属性面板中点击打开文件所在的位置(F)
此时打开的就是QQ安装目录(C:\Program Files\Tencent\QQNT),QQ.exe 位于QQ安装目录下
- 打开系统属性面板
依次打开设置(Windows+I)>系统>系统信息
点击高级系统设置
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 配置QQ的Path环境变量
首先点击系统变量的Path,然后再点击编辑
打开编辑环境变量面板
然后点击新建,将QQ 的安装目录(C:\Program Files\Tencent\QQNT)添加到Path环境变量中
- 点击三次确定关闭系统属性面板,完成QQ的Path环境变量配置
- 验证QQ的Path环境变量是否配置成功
首先使用Windows+R打开运行窗口
然后在运行窗口输入cmd回车后
重新开启一个终端
然后在终端的任意路径输入QQ后回车,看QQ是否能够启动成功
如下图所示如果能够启动则表示QQ的Path环境变量配置成功
2.4.3 为什么Java8 要配置Path环境变量
假设不配置Java8的Path环境变量,在终端上使用javac和java的时候,如下图所示系统会提示 不是内部或外部命令,也不是可运行的程序或批处理文件。
- javac 用于编译java源文件(.java结尾的文件),编译成功之后会生成字节码文件(.class结尾的文件)
- java 用于解释执行字节码文件,运行Java程序
因为Java8提供的开发工具(javac,java)需要在终端上使用,如果你双击运行javac和java,它们会在终端运行后立刻出现闪退现象。
为了在终端的任意路径下使用javac和java,因此我们需要将Java8安装目录的bin目录添加到Path环境变量中
2.4.4 Java8配置Path环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 配置Java8的Path环境变量
首先点击系统变量的Path环境变量,再点击编辑
点击新建,将Java8安装目录的bin目录(C:\Program Files\Java\jdk-1.8\bin)添加到Path环境变量中
并且置顶
选中Java8的Path环境变量,然后点击若干次上移
- 依次点击三次确定,关闭系统属性面板,完成Java8的Path环境变量配置
- 验证Java8的Path环境变量是否配置成功
验证Java8的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,
如下图所示如果终端能够输出Java编译器和Java解释器的版本信息则表示Java8的Path环境变量配置成功
2.4.5 Java8使用JAVA_HOME配置Path环境变量
Q:为什么Java8要使用JAVA_HOME配置Path环境变量
A:切换JDK版本时只需要修改JAVA_HOME环境变量的值即可
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 使用JAVA_HOME配置Java8的Path环境变量
首先点击系统变量的Path,然后点击编辑
然后将Java8的Path环境变量C:\Program Files\Java\jdk-1.8\bin 改成%JAVA_HOME%\bin
%JAVA_HOME%就是C:\Program Files\Java\jdk-1.8
- 依次点击三次确定,关闭系统属性面板,完成Java8使用JAVA_HOME配置Path环境变量
- 验证Java8的Path环境变量是否配置成功
验证Java8的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,
如下图所示如果终端能够输出Java编译器和Java解释器的版本信息则表示Java8的Path环境变量配置成功
2.5 Windows版Java8卸载
Q:什么时候需要卸载Java8
A:如果不再使用(例如公司项目全部使用Java17开发)Java8时就可以将其卸载
Windows版Java8的卸载需要删除Java8相关环境变量(Path环境变量、JAVA_HOME环境变量)以及Java8程序
2.5.1 删除Java8 Path环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 删除Java8的Path环境变量
首先选择系统变量的Path,然后点击编辑
然后选择Java8的Path环境变量%JAVA_HOME%\bin,点击删除
- 依次点击三次确定关闭系统属性面板,完成Java8的Path环境变量删除
- 验证Java8的Path环境变量是否删除成功
验证Java8的Path环境变量是否删除成功的方法是重新开启一个新的终端,在终端的任意路径下输入javac -version和java -version,如下图所示如果系统提示javac和java不是内部或外部命令,也不是可运行的程序或批处理文件,则表示Java8的Path环境变量删除成功
2.5.2 删除Java8 JAVA_HOME环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 删除Java8的JAVA_HOME环境变量
选择系统变量的JAVA_HOME,点击删除
- 依次点击两次确定关闭系统属性面板完成Java8 JAVA_HOME环境变量的删除
- 验证Java8 JAVA_HOME环境变量是否删除成功
验证Java8 JAVA_HOME环境变量是否删除成功的方法就是重新开启一个终端,然后在终端上输入echo %JAVA_HOME% 回车后,
如下图所示如果不能输出Java8的安装路径,而是输出%JAVA_HOME%,那么表示Java8 JAVA_HOME环境变量删除成功
2.5.3 卸载Java8程序
- 打开安装的应用
右键点击开始菜单,然后左键选择安装的应用
此时可以查看安装的应用
免安装版本的软件不会在安装的应用列表中显示
- 在安装的应用中搜索Java
- 选择Java8,点击卸载
确认卸载
然后在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗? 选择是即可
接下来就会开始卸载,此过程大概几秒钟
卸载成功后在安装的应用中找不到Java
3 Windows版Java17开发环境搭建
3.1 Windows 版Java17下载
- 访问Java的官网,其访问地址是https://www.oracle.com/java/
- 点击右上角的Download Java,跳转到Java的下载页面
Java的下载地址是 https://www.oracle.com/java/technologies/downloads/
目前(2024/08/09)Oracle官方提供最新可用的Java版本(JDK版本)是Java22、Java21 和Java17,最新的LTS版本是Java21
这是 NFTC 计划的 JDK 17 的最后一次更新。 2024 年 9 月之后的更新将根据 Java SE OTN 许可证 (OTN) 进行许可,超出 OTN 许可证有限免费授权的生产使用将需要付费。
根据 Oracle 免费条款和条件 (NFTC),JDK 17 二进制文件可以在生产中免费使用,并且可以免费重新分发。
目前Java17支持三个系统
- Linux
- macOS
- Windows
大家在下载Java17的时候需要根据自己所使用操作系统的版本选择对应版本的Java17
- 选择Windows版x64 Installer Java17
Q:如何知道使用Windows版本
A:在设置(Windows+I)>系统>系统信息查看设备规格和Windows规格
由于本机使用的操作系统是 64 位 Windows11专业工作站版 23H2 ,因此选择Windows x64 Installer 的jdk-17_windows-x64_bin.exe
- 下载Windows版 JDK17 x64 Installer
当点击 https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe 下载连接后浏览器会自动开始下载Windows版 JDK17 x64 Installer
使用快捷键 Ctrl+J 可以打开下载内容,查看下载的速度以及所需的时间
由于目前(2024/08/09)Java17可以免费使用,因此和Java8相比下载时不需要同意许可协议,也不需要注册和登录Oracle账号,因此下载Java17比下载Java8更加方便。
当Java17下载完成后,点击在文件夹中显示
默认在下载目录(C:\Users\liuguanglei\Downloads)下会看到Java17的安装包jdk-17_windows-x64_bin.exe
3.2 Windows 版Java17安装
3.2.1 Windows版Java17安装过程
- 左键双击Windows版Java17的安装包jdk-17_windows-x64_bin.exe启动安装程序
在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗?选择是
即可启动安装程序
- 点击下一步
- 选择目标文件夹
默认安装路径是C:\Program Files\Java\jdk-17
如果想要更改到其他目录,点击更改即可,但是注意安装路径不要包含中文字符和中文空格
- 点击下一步
安装进行中,安装过程需要几秒钟
- 安装完成
Java17安装完成后点击①后续步骤和②完成
- 后续步骤:跳转到Java17官方文档
- 关闭:关闭Java17安装向导,完成Java17安装
3.2.2 Windows版Java17安装目录
Windows版Java17默认的安装路径是C:\Program Files\Java\jdk-17
Java17安装目录说明
目录 | 说明 |
---|---|
bin | 该目录下主要存放JDK的各种工具,例如javac,java等等 |
conf | 该目录下主要存放JDK的相关配置文件 |
include | 该目录下主要存放一些平台(操作系统)特定的头文件 |
jmods | 该目录下主要存放JDK的各种模块 |
legal | 该目录下主要存放JDK各种模块的授权文档 |
lib | 该目录下主要存放JDK的一些补充jar包以及Java源码(src.zip) |
作为Java初学者来说,目前只需要关注bin目录和lib目录
- bin目录:存放Java提供的开发工具,例如javac,java,javadoc,javap 等等
- lib目录:src.zip 存放Java源代码文件(.java结尾的文件)
该文件可以使用WinRAR解压缩,WinRAR需要下载、安装后才能使用
将src.zip文件解压到src
在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗?选择是即可
src文件夹下存放的就是Java源代码
例如String.java
该文件位于 java.base\java\lang 目录下
Visual Studio Code是一个跨平台的文本编辑器,需要自己下载、安装后才能使用
使用Visual Studio Code文本编辑器打开String.java
3.3 Windows版Java17配置JAVA_HOME环境变量
3.3.1 为什么Java17要配置JAVA_HOME环境变量
JAVA_HOME表示Java的安装路径,例如C:\Program Files\Java\jdk-17
后期我们会使用到Java开发的一些工具,例如Tomcat、Maven这些工具都会依赖JAVA_HOME环境变量。如果你不配置就无法正常使用,而且这些工具会提示你配置JAVA_HOME环境变量。
例如在终端位于Tomcat的bin目录下(D:\soft\java\apache-tomcat-10.1.28\bin)执行 startup.bat脚本启动Tomcat时会提示需要配置JAVA_HOME环境变量
而只有在安装Java并且配置JAVA_HOME环境变量以后,在终端位于Tomcat的bin目录下(D:\soft\java\apache-tomcat-10.1.28\bin)执行 startup.bat脚本才能正常启动Tomcat
- 打开文件资源管理器(Windows+E),进入Tomcat的bin目录(D:\soft\java\apache-tomcat-10.1.28\bin)
- 在文件资源管理器的地址栏输入cmd后回车打开终端
此时终端所在的当前路径就是Tomcat的bin目录(D:\soft\java\apache-tomcat-10.1.28\bin)
- 在终端上输入startup.bat回车后启动Tomcat
启动成功之后在浏览器地址栏输入 http://127.0.0.1:8080 可以访问Tomcat首页
不过Tomcat运行窗口会有中文乱码问题
原因是因为Window终端默认是GBK编码(GB2312),但是Tomcat默认是UTF-8编码,为了解决乱码问题
因此启动之前需要将位于Tomcat配置文件目录(D:\soft\java\apache-tomcat-10.1.28\conf)的Tomcat日志配置文件logging.properties使用Visual Studio Code打开
将关于控制台编码由默认的UTF-8改成GBK,就可以解决Tomcat启动窗口中文乱码问题
java.util.logging.ConsoleHandler.encoding = GBK
编码修改成GBK以后重新打开终端后再次重启Tomcat,就会发现Tomcat运行窗口中文没有乱码
最后将控制台编码改回UTF-8,因为以后开发Java项目会使用UTF-8编码,而不是GBK编码
3.3.2 Java17配置JAVA_HOME环境变量
- 打开系统属性面板
依次打开设置(Windows+I)>系统>系统信息
点击高级系统设置
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
环境变量分为用户变量和系统变量,二者的区别是作用范围不同
- 用户变量只针对当前用户有效
- 系统变量针对所有用户都有效
Windows电脑通常只有一个人使用,不太可能有多个用户,因此建议使用系统变量
- 配置Java17的JAVA_HOME环境变量
点击系统变量的新建(W),然后输入变量名和变量值
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk-17
- 依次点击三个确定,关闭系统属性面板,完成Java17 的JAVA_HOME环境变量配置
- 验证Java17的JAVA_HOME环境变量配置是否成功
验证的方法就是启动一个终端,然后在终端输入echo %JAVA_HOME%,如果能够输出Java的安装路径表示配置成功
Q:如何启动终端
A:在文件资源管理器(Windows+E)的地址栏输入cmd后回车
就可以打开终端
输入 echo %JAVA_HOME% 验证JAVA_HOME环境变量是否配置成功,如下图所示如果能够输出Java17的安装目录C:\Program Files\Java\jdk-17则表示配置成功
3.4 Windows版Java17配置Path环境变量
3.4.1 Java17自动配置Path环境变量
在安装Java17以后,Java17会自动配置Path环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 打开编辑环境变量面板
在系统属性面板依次点击高级>环境变量>系统变量Path>编辑后可以查看到Java17自动配置的Path环境变量
不过配置的路径是C:\Program Files\Common Files\Oracle\Java\javapath,该路径下只有javac、java、javaw和jshell四个工具
这样也就意味着即使在没有手动配置Java17的Path环境变量的情况下依然可以在终端的任意路径下使用javac和java,例如在终端的任意路径下使用javac和java提供的-version选项查看Java编译器和解释器的版本信息
但是无法在终端的任意路径下使用Java提供的除了javac、java、javaw和jshell以外的其他工具,例如jconsole、jps、jstack等等,因此建议手动配置Java17的Path环境变量。
3.4.2 Java17手动配置Path环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 配置Java17的PATH环境变量
首先点击系统变量的Path环境变量,再点击编辑
点击新建,将Java17安装目录的bin目录(C:\Program Files\Java\jdk-17\bin)添加到Path环境变量中
并且置顶
选中Java17的Path环境变量,然后点击若干次上移
然后将Java17自动配置的Path环境变量删除
- 依次点击三次确定,关闭系统属性面板,完成Java17的Path环境变量配置
- 验证Java17的Path环境变量是否配置成功
验证Java17的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,如下图所示如果终端能够输出Java编译器版本信息和Java解释器版本信息则表示Java17的Path环境变量配置成功
3.4.3 Java17使用JAVA_HOME配置Path环境变量
Q:为什么Java17要使用JAVA_HOME配置Path环境变量
A:切换JDK版本时只需要修改JAVA_HOME环境变量的值即可
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 使用JAVA_HOME配置Java17的PATH环境变量
首先点击系统变量的Path环境变量,再点击编辑
将Java17的Path环境变量由C:\Program Files\Java\jdk-17\bin改成%JAVA_HOME%\bin
%JAVA_HOME%就表示C:\Program Files\Java\jdk-17
- 依次点击三次确定,关闭系统属性面板,完成Java17使用JAVA_HOME配置Path环境变量
- 验证Java17的Path环境变量配置是否成功
验证Java17的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,如果终端能够输出Java编译器版本信息和Java解释器版本信息则表示Java17的Path环境变量配置成功
3.5 Windows版Java17和Java8 相互切换
3.5.1 如何实现Java17和Java8相互切换
由于开发项目时使用Java8,但是想要学习和使用高版本Java的新特性或者项目中想要使用Spring Boot 3,因此安装Java17,
此时电脑上同时存在两个不同版本的Java:Java8和Java17
那么如何在这两个版本之间来回切换?
首先需要知道当前使用的Java版本
在终端的任意路径通过javac -version和java -version得知目前使用的是Java17
Q:为什么Java版本是Java17?
A:因为通过系统属性面板查看①JAVA_HOME环境变量的值是Java17的安装路径,②JDK的Path环境变量引用了JAVA_HOME环境变量
那么想要实现Java8和Java17相互切换,只需要修改JAVA_HOME环境变量的变量值即可
3.5.2 Windows版Java17切换到Java8
想要从Java17切换到Java8,只需要将系统属性面板中JAVA_HOME环境变量的变量值C:\Program Files\Java\jdk-17修改成Java8的安装路径C:\Program Files\Java\jdk-1.8
然后重新开启一个终端,在终端的任意路径上输入javac -version和java -version,如果终端输出的Java编译器和Java解释器的版本信息为Java8则表示Java版本成功从Java17切换到Java8
3.5.3 Windows版Java8切换到Java17
从Java8再次切换到Java17,只需要将系统属性面板中JAVA_HOME环境变量的变量值C:\Program Files\Java\jdk-1.8改成Java17的安装路径C:\Program Files\Java\jdk-17
然后重新开启一个终端,在终端的任意路径上输入javac -version和java -version,如果终端输出的Java编译器和Java解释器版本信息为Java17则表示Java版本成功从Java8切换到Java17
3.6 Windows版Java17卸载
Q:什么时候需要卸载Java17
A:如果不再使用(例如公司项目全部使用Java21开发)Java17时就可以将其卸载
Windows版Java17的卸载需要删除Java17相关环境变量(Path环境变量、JAVA_HOME环境变量)以及Java17程序
3.6.1 删除Java17 Path环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 删除Java17的Path环境变量
首先选择系统变量的Path,然后点击编辑
然后选择Java17的Path环境变量%JAVA_HOME%\bin,点击删除即可
- 依次点击三次确定关闭系统属性面板,完成Java17的Path环境变量删除
- 验证Java17的Path环境变量是否删除成功
验证方法是重新开启一个新的终端,在终端的任意路径下输入javac -version和java -version,如下图所示如果系统提示javac和java不是内部或外部命令,也不是可运行的程序或批处理文件则表示Java17的Path 环境变量删除成功
3.6.2 删除Java17 JAVA_HOME环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 删除Java17的JAVA_HOME环境变量
选择系统变量的JAVA_HOME,点击删除
- 依次点击两次确定关闭系统属性面板完成Java17 JAVA_HOME环境变量的删除
- 验证Java17 JAVA_HOME环境变量是否删除成功
验证方法是重新开启一个终端,然后在终端上输入echo %JAVA_HOME% 回车后,如下图所示如果不能输出Java17的安装路径而是输出%JAVA_HOME%,那么表示Java17 JAVA_HOME环境变量删除成功
3.6.3 卸载Java17程序
- 打开安装的应用
右键点击开始菜单,然后左键选择安装的应用
此时可以查看安装的应用
免安装版本的软件不会在安装的应用列表显示
Java8已经被提前卸载
- 在安装的应用中搜索Java
- 选择Java17,点击卸载
确认卸载
然后在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗? 选择是即可
接下来就会开始卸载,此过程大概几秒钟
卸载成功后在安装的应用中找不到Java17
4 Windows版Java21开发环境搭建
4.1 Windows版Java21下载
- 访问Java的官网,其访问地址是https://www.oracle.com/java/
- 点击右上角的Download Java,跳转到Java的下载页面
Java的下载地址是 https://www.oracle.com/java/technologies/downloads/
目前(2024/08/09)Oracle官方提供最新可用的Java版本(JDK版本)是Java22、Java21 和Java17,最新的LTS版本是Java21
根据 Oracle 免费条款和条件 (NFTC),JDK 21 二进制文件可以在生产中免费使用,并且可以免费重新分发。
JDK 21 将根据 NFTC 接收更新,直到 2026 年 9 月,即下一个 LTS 发布一年后。后续的 JDK 21 更新将根据 Java SE OTN 许可证 (OTN) 进行许可,并且超出 OTN 许可证有限免费授予的生产使用将需要付费。
目前Java21支持三个系统
- Linux
- macOS
- Windows
大家在下载Java21的时候需要根据自己所使用操作系统的版本选择对应版本的Java21
- 选择Windows版 x64 Installer Java21
Q:如何知道使用Windows版本
A:在设置(Windows+I)>系统>系统信息查看设备规格和Windows规格
由于本机使用的操作系统是 64 位 Windows11专业工作站版 23H2 ,因此选择Windows x64 Installer 的jdk-21_windows-x64_bin.exe
- 下载Windows版 JDK21 x64 Installer
当点击 https://download.oracle.com/java/21/latest/jdk-21_windows-x64_bin.exe 下载连接后浏览器会自动开始下载Windows版 JDK21 x64 Installer
使用快捷键 Ctrl+J 可以打开下载内容,查看下载的速度以及所需的时间
由于目前Java21可以免费使用,因此和Java8相比下载时不需要同意许可协议,也不需要注册和登录Oracle账号,因此下载Java21比下载Java8更加方便。
当Java21下载完成后,点击在文件夹中显示
默认在下载目录(C:\Users\liuguanglei\Downloads)下会看到Java21的安装包jdk-21_windows-x64_bin.exe
4.2 Windows版Java21安装
4.2.1 Windows版Java21安装过程
- 左键双击Windows版Java21的安装包jdk-21_windows-x64_bin.exe启动安装程序
在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗?选择是即可启动安装程序
- 点击下一步
- 选择目标文件夹
默认安装路径是C:\Program Files\Java\jdk-21
如果想要更改到其他目录,点击更改即可,但是注意安装路径不要包含中文字符和中文空格
- 点击下一步
安装进行中,安装过程需要几秒钟
- 安装成功
Java21安装完成后点击①后续步骤和②关闭
- 后续步骤:跳转到Java21官方文档
- 关闭:关闭Java21安装向导,完成Java21安装
4.2.2 Windows版Java21安装目录
Windows版Java21默认的安装路径是C:\Program Files\Java\jdk-21
Java21安装目录说明
目录 | 说明 |
---|---|
bin | 该目录下主要存放JDK的各种工具,例如javac,java等等 |
conf | 该目录下主要存放JDK的相关配置文件 |
include | 该目录下主要存放一些平台(操作系统)特定的头文件 |
jmods | 该目录下主要存放JDK的各种模块 |
legal | 该目录下主要存放JDK各种模块的授权文档 |
lib | 该目录下主要存放JDK的一些补充jar包以及Java源码(src.zip) |
作为Java初学者来说,目前只需要关注bin目录和lib目录
- bin目录:存放Java提供的开发工具,例如javac,java,javadoc,javap 等等
- lib目录:src.zip 存放Java源代码文件(.java结尾的文件)
该文件可以使用WinRAR解压缩,WinRAR需要下载、安装后才能使用
将src.zip文件解压到src
在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗?选择是即可
src文件夹下存放的就是Java源代码
例如String.java
该文件位于 java.base\java\lang 目录下
Visual Studio Code是一个跨平台的文本编辑器,需要自己下载、安装后才能使用
使用Visual Studio Code文本编辑器打开String.java
4.3 Windows版Java21配置JAVA_HOME环境变量
4.3.1 为什么Java21要配置JAVA_HOME环境变量
JAVA_HOME表示Java的安装路径,例如C:\Program Files\Java\jdk-21
后期我们会使用到Java开发的一些工具,例如Tomcat、Maven这些工具都会依赖JAVA_HOME环境变量。如果你不配置就无法正常使用,而且这些工具会提示你配置JAVA_HOME环境变量。
例如在终端位于Tomcat的bin目录下(D:\soft\java\apache-tomcat-10.1.28\bin)执行 startup.bat脚本启动Tomcat时会提示需要配置JAVA_HOME环境变量
而只有在安装Java并且配置JAVA_HOME环境变量以后,在终端位于Tomcat的bin目录下(D:\soft\java\apache-tomcat-10.1.28\bin)执行 startup.bat脚本才能正常启动Tomcat
- 打开文件资源管理器(Windows+E),进入Tomcat的bin目录(D:\soft\java\apache-tomcat-10.1.28\bin)
- 在文件资源管理器的地址栏输入cmd后回车打开终端
此时终端所在的当前路径就是Tomcat的bin目录(D:\soft\java\apache-tomcat-10.1.28\bin)
- 在终端上输入startup.bat回车后启动Tomcat
启动成功之后在浏览器地址栏输入 http://127.0.0.1:8080 可以访问Tomcat首页
不过Tomcat运行窗口会有中文乱码问题
原因是因为Window终端默认是GBK编码(GB2312),但是Tomcat默认是UTF-8编码,为了解决乱码问题
因此启动之前需要将位于Tomcat配置文件目录(D:\soft\java\apache-tomcat-10.1.28\conf)的Tomcat日志配置文件logging.properties使用Visual Studio Code打开
将关于控制台编码由默认的UTF-8改成GBK,就可以解决Tomcat启动窗口中文乱码问题
java.util.logging.ConsoleHandler.encoding = GBK
编码修改成GBK以后重新打开终端后再次重启Tomcat,就会发现Tomcat运行窗口中文没有乱码
最后将控制台编码改回UTF-8,因为以后开发Java项目会使用UTF-8编码,而不是GBK编码
4.3.2 Java21配置JAVA_HOME环境变量
- 打开系统属性面板
依次打开设置(Windows+I)>系统>系统信息
点击高级系统设置
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
环境变量分为用户变量和系统变量,二者的区别是作用范围不同
- 用户变量只针对当前用户有效
- 系统变量针对所有用户都有效
Windows电脑通常只有一个人使用,不太可能有多个用户,因此建议使用系统变量
- 配置Java21的JAVA_HOME环境变量
点击系统变量的新建(W),然后输入变量名和变量值
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk-21
- 依次点击三个确定,关闭系统属性面板,完成Java21 的JAVA_HOME环境变量配置
- 验证Java21的JAVA_HOME环境变量配置是否成功
验证的方法就是启动一个终端,然后在终端输入echo %JAVA_HOME%,如果能够输出Java21的安装路径表示配置成功
Q:如何启动终端
A:在文件资源管理器(Windows+E)的地址栏输入cmd后回车
就可以打开终端
输入 echo %JAVA_HOME% 验证JAVA_HOME环境变量是否配置成功,如下图所示如果能够输出Java21的安装目录C:\Program Files\Java\jdk-21则表示配置成功
4.4 Windows版Java21配置Path环境变量
4.4.1 Java21自动配置Path环境变量
在安装Java21以后,Java21会自动配置Path环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 打开编辑环境变量面板
在系统属性面板依次点击高级>环境变量>系统变量Path>编辑后可以查看到Java21自动配置的Path环境变量
不过配置的路径是C:\Program Files\Common Files\Oracle\Java\javapath,该路径下只有javac、java、javaw和jshell四个工具
这样也就意味着即使在没有手动配置Java21的Path环境变量的情况下依然可以在终端的任意路径下使用javac和java,例如在终端的任意路径下使用javac和java提供的-version选项查看Java编译器和解释器的版本信息
但是无法在终端的任意路径下使用Java提供的除了javac、java、javaw和jshell以外的其他工具,例如jconsole、jps、jstack等等,因此建议手动配置Java21的Path环境变量。
4.4.2 Java21手动配置Path环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 配置Java21的PATH环境变量
首先点击系统变量的Path环境变量,再点击编辑
点击新建,将Java21安装目录的bin目录(C:\Program Files\Java\jdk-21\bin)添加到Path环境变量中
并且置顶
选中Java21的Path环境变量,然后点击若干次上移
然后将Java21自动配置的Path环境变量删除
- 依次点击三次确定,关闭系统属性面板,完成Java21的Path环境变量配置
- 验证Java21的Path环境变量是否配置成功
验证Java21的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,如下图所示如果终端能够输出Java编译器版本信息和Java解释器版本信息则表示Java21的Path环境变量配置成功
4.4.3 Java21使用JAVA_HOME配置Path环境变量
Q:为什么Java21要使用JAVA_HOME配置Path环境变量
A:切换JDK版本时只需要修改JAVA_HOME环境变量的值即可
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 使用JAVA_HOME配置Java21的PATH环境变量
首先点击系统变量的Path环境变量,再点击编辑
将Java21的Path环境变量由C:\Program Files\Java\jdk-21\bin改成%JAVA_HOME%\bin
%JAVA_HOME%就表示C:\Program Files\Java\jdk-21
- 依次点击三次确定,关闭系统属性面板,完成Java17使用JAVA_HOME配置Path环境变量
- 验证Java21的Path环境变量配置是否成功
验证Java21的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,如果终端能够输出Java编译器版本信息和Java解释器版本信息则表示Java21的Path环境变量配置成功
4.5 Windows版Java21和Java17相互切换
4.5.1 如何实现Java21和Java17相互切换
由于开发项目时使用Java17,但是想要学习和使用高版本Java的新特性,因此安装了Java21
此时电脑上同时存在两个不同版本的Java:Java17和Java21
那么如何在这两个版本之间来回切换?
首先需要知道当前使用的Java版本
在终端的任意路径通过javac -version和java -version得知目前使用的是Java21
Q:为什么Java版本是Java21?
A:因为通过系统属性面板查看①JAVA_HOME环境变量的值是Java21的安装路径,②JDK的Path环境变量引用了JAVA_HOME环境变量
那么想要实现Java17和Java21相互切换,只需要修改JAVA_HOME环境变量值即可
4.5.2 Windows版Java21切换到Java17
想要从Java21切换到Java17,只需要将JAVA_HOME环境变量的变量值C:\Program Files\Java\jdk-21修改成Java17的安装路径C:\Program Files\Java\jdk-17
然后重新开启一个终端,在终端的任意路径上输入javac -version和java -version,如下图所示如果终端输出的Java编译器和解释器版本信息为Java17则表示Java版本成功从Java21切换到Java17
4.5.3 Windows版Java17切换到Java21
从Java17再次切换到Java21,只需要将JAVA_HOME环境变量的变量值C:\Program Files\Java\jdk-17改成Java21的安装路径C:\Program Files\Java\jdk-21
然后重新开启一个终端,在终端的任意路径上输入javac -version和java -version,如下图所示如果终端输出的Java编译器和解释器版本信息为Java21则表示Java版本成功从Java17切换到Java21
4.6 Windows版Java21卸载
Q:什么时候需要卸载Java21
A:如果不再使用(例如公司项目全部使用Java25开发)Java21时就可以将其卸载
Windows版Java21的卸载需要删除Java21相关环境变量(Path环境变量、JAVA_HOME环境变量)以及Java21程序
4.6.1 删除Java21 Path环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 删除Java21的Path环境变量
首先选择系统变量的Path,然后点击编辑
然后选择Java21的Path环境变量%JAVA_HOME%\bin,点击删除即可
- 依次点击三次确定关闭系统属性面板,完成Java21的Path环境变量删除
- 验证Java21的Path环境变量是否删除成功
验证方法是重新开启一个新的终端,在终端的任意路径下输入javac -version和java -version,如下图所示如果系统提示javac和java不是内部或外部命令,也不是可运行的程序或批处理文件则表示Java21的Path 环境变量删除成功
4.6.2 删除Java21 JAVA_HOME环境变量
- 打开系统属性面板
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量并打开
然后会弹出系统属性面板
- 在系统属性面板依次点击高级>环境变量打开环境变量面板
- 删除Java21的JAVA_HOME环境变量
选择系统变量的JAVA_HOME,点击删除
- 依次点击两次确定关闭系统属性面板完成Java21 JAVA_HOME环境变量的删除
- 验证Java21 JAVA_HOME环境变量是否删除成功
验证的方法就是重新开启一个终端,然后在终端上输入echo %JAVA_HOME% 回车后
如下图所示如果不能输出Java21的安装路径而是输出%JAVA_HOME%,那么表示Java21 JAVA_HOME环境变量删除成功
4.6.3 卸载Java21程序
- 打开安装的应用
右键点击开始菜单,然后左键选择安装的应用
此时可以查看安装的应用
免安装版本的软件不会在安装的应用列表显示
Java17已经被提前卸载
- 在安装的应用中搜索Java
- 选择Java21,点击卸载
确认卸载
然后在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗? 选择是即可
接下来就会开始卸载,此过程大概几秒钟
卸载成功后在安装的应用中找不到Java
5 Mac平台CPU架构和Rosetta
5.1 Mac平台CPU架构
早期Mac电脑都是使用Intel CPU,但是2020年以后苹果在ARM架构基础上自己研发CPU,例如M1 Max,M2 Max,M2 Ultra,M3 Max ,M4,M4 Pro,M4 Max等等用于不同的Mac电脑(MacBook Air,MacBook Pro,Mac Studio,Mac Pro)
因此苹果的Mac电脑有Intel x86架构和ARM架构两种不同的CPU架构
那么问题来了,如何知道自己所使用Mac电脑的CPU架构?
在macOS Sonoma点击左上角的苹果菜单,然后选择关于本机
在弹出的面板中看到芯片是Apple开头的就是ARM架构
而macOS Monterey在弹出的概览窗口中看到芯片包含Intel就是 Intel x86架构
正是因为两种不同的CPU架构,直接导致基于Intel x86架构开发的程序(例如阿里旺旺、金山文档、亿图图示等等)是无法直接运行在基于ARM架构的CPU上,例如M1 Max,M1 Ultra,M2 Max,M2 Ultra,M3 Max,M3 Ultra等等
5.2 Rosetta
**5.2.1 **什么时候需要Rosetta
苹果公司提供了一个翻译工具-Rosetta 2,通过 Rosetta 2,搭载 Apple 芯片的 Mac 可以使用专为配备 Intel 处理器的 Mac 构建的 App,这样也就意味着以前为Intel CPU开发的程序可以通过Rosetta 2 运行在苹果芯片的Mac电脑上,例如阿里旺旺、金山文档等等。
5.2.3 如何安装Rosetta
Rosetta 2 仅适用于搭载 Apple 芯片的 Mac 电脑。
首次安装或者打开需要 Rosetta 的 App 时,例如阿里旺旺,恒星播放器,金山文档等等,系统会要求您安装 Rosetta。点按“安装”,然后输入您的用户名和密码以允许继续安装。
如果您点按“以后”,则下次打开需要 Rosetta 的 App 时,系统会再次要求您安装 Rosetta。
如果 Rosetta 已经安装,则系统不会再次要求您安装,也就是仅仅需要安装一次。
5.2.3 如何使用Rosetta
您不需要打开 Rosetta 或与这个 App 互动。每当您使用专为搭载 Intel 处理器的 Mac 电脑构建的 App 时,Rosetta 都会在后台自动运行。Rosetta 会转换相应 App,使它可以与 Apple 芯片搭配使用。 对于需要 Rosetta 的 App,在大多数情况下,您不会察觉它的性能有任何不同。不过,您应该联系 App 开发者,以询问相应 App 有没有一个版本能够以原生方式来充分利用 Apple 芯片的功能和性能。
5.2.4 哪些应用需要Rosetta
要识别需要 Rosetta 或者可以使用 Rosetta 的 App,请按照以下步骤操作:
在“访达”中选择一个 App。 从菜单栏的“文件”菜单中,选取“显示简介”。
查看标有“种类”字样的信息: 应用程序 (Intel) 表示 App 仅支持 Intel 处理器,并且需要 Rosetta 才能在搭载 Apple 芯片的 Mac 上运行,例如阿里旺旺、金山文档、亿图图示
应用程序(通用)表示 App 既支持 Apple 芯片也支持 Intel 处理器,并且在默认情况下使用 Apple 芯片。通用 App 不需要 Rosetta。例如微信、QQ、网易邮箱大师等等
对于标有“应用程序(通用)”的 App,“简介”窗口包含“使用 Rosetta 打开”这项设置。通过这项设置,网页浏览器等通用 App 可以使用还没有更新为支持 Apple 芯片的插件、扩展或其他附加组件。如果某个通用 App 无法识别您为这个 App 安装的附加组件,您可以退出这个 App,选择这项设置,然后再试一次。
应用程序(Apple芯片) 表示App是专门针对Apple芯片开发的,例如M1 Max,M1 Ultra,M2 Max,M2 Ultra,M3 Max,M3 Ultra等等都属于Apple芯片。
6 iTerm2
6.1 iTerm2介绍
iTerm**2 **是macOS平台的第三方终端,目前最新版本是iTerm2 3.5.4
6.2 iTerm2下载
- 访问iTerm2官网
- 点击Download就可以下载最新版iTerm2
- 使用快捷键Optional+Command+L查看下载内容
点击在Finder中显示
就可以在访达的下载目录看到iTerm2-3_5_4.zip
6.3 iTerm2安装
- 解压iTerm2-3_5_4.zip
双击iTerm2-3_5_4.zip就可以解压
- 将iTerm移动到应用程序文件夹
6.4 iTerm2配置
6.4.1 修改默认字体大小
使用Command+空格打开聚焦搜索
然后搜索并打开iTerm
首次打开iTerm时会提示 iTerm是从互联网下载的App。你确定是要打开它吗?点击打开
就可以启动iTerm
不过iTerm2默认的字体大小只有12,建议改成16
在启动iTerm后,首先点击菜单栏的iTerm>Settings,快捷键是Command+,
在Preferences>Profiles>Text将Font大小由12
改成16即可
6.4.2 修改默认配色
iTerm2默认配色配置是Regular
依次点击Profiles>Default>Colors>Color Presets…
就可以看到配色默认选择的是Regular
个人比较喜欢黑色,因此选择Tango Dark
7 右键助手专业版
7.1 右键助手专业版介绍
macOS的右键没有Windows功能丰富,只有新建文件夹、显示简介等等几个选项,无法新建文件。
因此一些第三方开发者提供了类似于Windows那样的右键菜单,例如右键助手专业版
7.2 右键助手专业版安装
App Store中提供正版右键助手专业版,只需要搜索后付费安装即可
7.3 右键助手专业版设置
在安装完右键助手专业版需要启用
启动右键助手专业版
点击去启用
再右键时右键菜单多了很多功能
7.4 右键助手专业版基本使用
7.4.1 新建文件
右键新建文件,选择Text
首次使用时需要授权
然后就可以新建文本文件
或者是其他文件,例如word等等
7.4.2 打开iTerm2终端
右键选择进如iTerm2
打开iTerm2终端
8 macOS版Java8开发环境搭建
8.1 macOS版Java8下载
- 访问Java的官网,其访问地址是 https://www.oracle.com/java/
- 点击右上角的Download Java,跳转到Java的下载界面
Java的下载地址是https://www.oracle.com/java/technologies/downloads/
目前(2024/08/12)Oracle官方提供最新可用的Java版本(JDK版本)是Java22、Java21 和Java17,最新的LTS版本是Java21
本次我们下载的是Java8,所以往下滚动到Java8的下载
目前Java8支持四个操作系统
- Linux
- macOS
- Solaris
- Windows
大家在下载Java8的时候需要根据CPU和操作系统的版本选择对应版本的Java8
macOS Sonoma可以点击左上角的苹果菜单>关于本机
在弹出的面板中查看系统版本信息
目前本机使用的系统是macOS Sonoma 14.6.1,芯片是M1 Max
- 根据CPU架构和系统版本选择Java8
如果你的Mac电脑使用的Intel CPU,那么选择macOS版 x64 DMG Installer的jdk-8u421-macosx-x64.dmg
如果你的Mac电脑使用的是Apple CPU,例如M1 Max,M1 Ultra,M2 Max,M2 Ultra,M3 Max等等,那么选择macOS版ARM64 DMG Installer的jdk-8u421-macosx-aarch64.dmg
由于本机使用的是Apple M1 Max CPU,因此选择macOS版ARM64 DMG Installer的jdk-8u421-macosx-aarch64.dmg
- 下载jdk-8u421-macosx-aarch64.dmg
首先点击jdk-8u421-macosx-aarch64.dmg,然后勾选许可协议,最后点击 Download jdk-8u421-macosx-aarch64.dmg
- 注册、登录Oracle账户
如果没有Oracle账户,大家可以在注册页面填写相应的信息注册Oracle账户
账户创建成功以后,在登录页面填写账户信息登录Oracle账户
登录成功之后浏览器会自动下载Java8使用快捷键 Option+Command+L 可以打开下载内容
点击更多操作
下载未经验证的文件
当Java8下载完成后,点击在Finder中显示
默认在下载目录(/Users/liuguanglei/Downloads)下会看到Java8的安装包jdk-8u421-macosx-aarch64.dmg
8.2 macOS版Java8安装
8.2.1 macOS版Java8安装过程
- 双击Java8安装包jdk-8u421-macosx-aarch64.dmg
- 双击JDK 8 Update421.pkg启动安装器
- 介绍
点击继续
- 目的宗卷
你要如何安装此软件?默认选择为这台电脑上的所有用户安装
选择一个目的宗卷:为这台电脑上的所有用户安装,点击继续
- 安装类型
默认选择标准安装,点击安装即可
安装之前安装器会提示 "安装器"正在尝试安装新软件 使用触控ID或输入密码以允许此次操作
输入密码或者使用TouchID后安装器就会开始安装,安装过程几秒钟就可以完成
输入密码或者使用TouchID后安装器就会开始安装,安装过程仅需不到1分钟
- 安装完成
安装完成后可以点击①后续步骤?和②关闭
- 后续步骤?:跳转到Java8的官方文档
- 关闭:关闭安装向导,完成Java8安装
关闭安装向导后还会提示你要将“JDK 8 Update 421”安装器移到废纸篓吗?,建议点击保留,这样下次重装时不需要重新下载Java8
- 推出桌面的JDK 8 Update 421
选中桌面的JDK 8 Update 421,然后右键推出即可,当然也可以使用快捷键Command+E推出
推出成功
8.2.2 macOS版Java8安装目录
默认情况下Oracle ARM64位架构macOS版Java8安装目录是/Library/Java/JavaVirtualMachines/jdk-1.8.jdk
依次点击访达>前往>前往文件夹,快捷键是Shift+Command+G
输入路径/Library/Java/JavaVirtualMachines/jdk-1.8.jdk后回车
即可进入该目录
不过我们需要了解的是/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home目录
作为Java初学者来说,目前只需要关注bin目录和src.zip压缩文件
- bin目录:存放Java提供的开发工具,例如javac,java,javadoc,javap等等
- src.zip:存放Java源代码文件(.java结尾的文件)
可以双击src.zip解压后查看,默认解压在下载目录
src目录存放的是Java源代码文件(.java结尾)
例如查看String.java
String.java源文件位于src/java/lang目录下
Visual Studio Code是一个跨平台的文本编辑器,需要自己下载、安装后才能使用
使用Visual Studio Code文本编辑器打开String.java
首次使用Visual Studio Code时会提示 Visual Studio Code 是从互联网下载的App。你确定要打开它吗?点击打开即可
使用Visual Studio Code打开String.java时会提示Visual Studio Code想要访问下载文件夹中的文件,点击允许
8.3 macOS版Java8配置
8.3.1 macOS版Java8配置说明
当Oracle ARM64位架构macOS版Java8安装完成后,你会发现没有配置PATH环境变量,也可以在终端的任意路径下使用javac和java,例如javac和java通过 -version选项查看Java编译器和解释器版本信息
没有配置JAVA_HOME环境变量,也可以在终端的maven bin目录(/Users/liuguanglei/Document/soft/java/apache-maven-3.9.8/bin)下使用maven命令 mvn --version查看Maven版本信息以及依赖的Java环境信息,其中./表示当前路径
Q:这样是不是意味着不需要配置Java8的PATH环境变量和JAVA_HOME环境变量?
A:依然需要配置,因为后期我们会使用多个不同版本的JDK,例如在公司开发项目时使用Java8,而学习Java新特性时使用Java17或者Java21,那么就会有切换Java版本的需求,因此还需要配置Java8的PATH环境变量和JAVA_HOME环境变量。
8.3.2 macOS版Java8配置JAVA_HOME环境变量
JAVA_HOME指的就是Java8的Home目录(/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home)
配置JAVA_HOME环境变量的目的就是方便配置Java的PATH环境变量以及通过修改JAVA_HOME环境变量实现在终端上切换不同版本的Java,例如Java8和Java17的相互切换,Java17和Java21的相互切换。
- 启动iTerm终端
- 查看系统所使用的Shell类型
苹果公司在2019年宣布,从macOS Catalina(版本10.15)开始,系统的默认Shell从Bash切换到了Zsh(Z Shell)。
不同的macOS系统使用的Shell类型不同,因此对应的配置文件不同
例如zsh使用的.zshrc,而bash使用的.bash_profile。
使用echo $SHELL 命令查看当前系统所使用的Shell类型
macOS Sonoma默认使用的zsh
- 创建配置文件
- 如果你使用的是bash shell,在用户家目录下创建.bash_profile文件
- 如果你使用的是zsh shell,在用户家目录下创建.zshrc文件
macOS的用户家目录指的就是/Users/liuguanglei,其中liuguanglei表示用户名,每个系统的用户名可能不相同。
当启动终端后默认就是在用户家目录下,可以使用pwd命令查看当前所在的目录
macOS Sonoma使用的Shell是zsh,因此在用户的家目录(/Users/liuguanglei)下使用touch .zshrc命令创建.zshrc配置文件,文件创建成功后使用 ls -a命令查看所有文件
- 打开.zshrc配置文件
在终端上输入vim .zshrc命令回车后打开用户家目录的.zshrc配置文件
此时vim处于命令模式,无法编辑文件内容
- 编辑.zshrc配置文件
需求:在.zshrc文件中添加Java8的JAVA_HOME环境变量
将输入法切换到英文后再按i键切换到编辑模式,只有进入编辑模式后才能修改文件内容
配置Oracle ARM64位架构macOS版Java8的JAVA_HOME环境变量
# 配置Oracle ARM64位架构macOS版Java8的JAVA_HOME环境变量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
Oracle ARM64位架构macOS版Java8的JAVA_HOME环境变量配置完成后按esc键由编辑模式切换到命令模式
- 保存并退出vim
输入法在英文状态下输入:由命令模式切换到底行模式,然后再输入wq回车后保存并退出vim
成功保存并退出vim
- 重新加载.zshrc配置文件
在重新加载.zshrc配置文件之前,先使用echo $JAVA_HOME查看JAVA_HOME环境变量,发现JAVA_HOME环境变量的值为空
输入source .zshrc 命令并回车,重新加载.zshrc配置文件,让当前Shell环境中设置的JAVA_HOME环境变量立即生效
source
命令是在 Unix/Linux 系统中用于在当前 Shell 环境中执行指定脚本文件的命令。该命令通常用于重新加载修改过的 shell 配置文件,使更改立即生效,而不必注销并重新登录。
具体来说,source
命令用于读取并执行指定的脚本文件,而不是启动一个新的进程来执行。这使得在当前 Shell 环境中设置的环境变量、别名以及其他配置更改能够立即生效。
需要注意的是每次执行source .zshrc都会将.zshrc配置文件中的环境变量加载到当前Shell环境中(执行一次,加载一次)
- 验证配置
在终端上输入 echo $JAVA_HOME命令回车后
如果能够输出Java8安装目录的Home目录(/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home ),则表示JAVA_HOME环境变量配置成功
8.3.3 macOS版Java配置PATH环境变量
8.3.3.1 PATH环境变量介绍
PATH环境变量的本质就是一系列路径,例如/bin,/usr/bin,/usr/local/bin等等,多个路径之间使用冒号(:)隔开,macOS下可以在终端上输入echo $PATH命令回车后查看系统PATH环境变量
PATH环境变量的作用就是在终端上执行命令时,系统会从当前路径和PATH环境变量配置的路径下查找命令对应的可执行程序,然后执行该程序。
例如date命令可以查看系统日期时间,而where date 可以查看到date命令对应可执行程序的路径,正因为/bin目录在PATH环境变量中,因此在终端输入date命令实际上执行的是/bin目录下的date程序
如果输入一个不存在的命令,那么shell会提示command not found,因为在PATH环境变量对应的路径下找不到一个名为datexxx的命令(程序)
8.3.3.2 PATH环境变量使用
需求:实现在macOS终端(例如内置终端和第三方终端iTerm)的任意路径下输入QQ就可以启动QQ
此次测试的QQ版本为6.9.52-26740
- 查找QQ安装目录
macOS系统中所有的软件都安装在访达的应用程序
选择QQ,右键 显示包内容
此时会打开Contents目录
而在Contents/MacOS下刚好有个QQ,它是一个Unix可执行文件
只要将它所在的路径(/Applications/QQ.app/Contents/MacOS)配置在PATH环境变量中即可实现在终端的任意路径下输入QQ就可以启动QQ
- 启动终端
- 打开.zshrc配置文件
首先在终端上输入vim .zshrc命令回车后打开用户家目录的.zshrc配置文件
打开后可以看到Java8的JAVA_HOME环境变量的配置
- 编辑.zshrc配置文件
此时vim处于命令模式无法编辑文件内容,需要将输入法切换到英文状态下后再按i键由命令模式切换到编辑模式
配置QQ的PATH环境变量
# 配置QQ的PATH环境变量
export PATH=$PATH:/Applications/QQ.app/Contents/MacOS
QQ的PATH环境变量配置添加完成后按esc键由编辑模式切换到命令模式
- 保存并退出vim
在英文状态下输入:切换到底行模式,然后再输入wq并回车后保存并退出vim
成功保存并退出vim
- 重新加载.zshrc配置文件
在重新加载.zshrc配置文件之前,先使用echo $PATH查看系统PATH环境变量,发现系统PATH环境变量中没有包含QQ的PATH环境变量配置
输入source .zshrc 命令并回车,重新加载.zshrc配置文件,让当前Shell环境中设置的PATH环境变量立即生效
- 验证配置
先在终端输入echo $PATH查看PATH环境变量,PATH环境变量必须包含QQ的PATH环境变量配置
然后在终端的任意路径输入QQ回车后看是否能够启动成功
如果能够启动QQ则表示QQ的PATH环境变量配置成功
在用户的家目录启动QQ
在系统根目录启动QQ
终止命令运行可以使用Control+c
8.3.3.3 macOS版Java8配置PATH环境变量
- 启动iTerm
- 打开.zshrc配置文件
在终端上输入vim .zshrc命令回车后打开用户家目录的.zshrc配置文件
打开后可以看到Java8的JAVA_HOME环境变量的配置以及QQ的PATH环境变量配置
- 编辑.zshrc配置文件
此时vim处于命令模式无法编辑文件内容,需要将输入法切换到英文状态下后再按i键由命令模式切换到编辑模式
然后配置Oracle ARM64位架构macOS版Java8的PATH环境变量
# 配置Oracle ARM64位架构macOS版Java8的PATH环境变量
export PATH=$PATH:/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home/bin
配置Oracle ARM64位架构macOS版Java8的PATH环境变量后按esc键从编辑模式切换到命令模式
- 保存并退出vim
输入法在英文状态下输入:切换到底行模式,再输入wq并回车后保存并退出vim
成功保存并退出vim
- 重新加载.zshrc配置文件
在重新加载.zshrc配置文件之前,先使用echo $PATH查看系统PATH环境变量,发现系统PATH环境变量中没有包含Java8的PATH环境变量配置
输入source .zshrc 命令并回车,重新加载.zshrc配置文件,让当前Shell环境中设置的PATH环境变量立即生效
- 验证配置
在终端上输入echo $PATH命令查看系统的PATH环境变量,如果PATH环境变量包含了Java8则表示配置成功
不过细心的同学会发现QQ的PATH环境变量被加载了两次,因为每执行一次source .zshrc命令,QQ的PATH环境变量被加载一次到当前Shell环境中
重新开启一个新的终端(command+n),在终端上输入echo $PATH 查看系统PATH环境变量时会发现QQ的PATH环境变量不再重复出现(即只加载了一次)
同时也可以在终端的任意路径下使用Java提供的命令,例如javac命令和java命令通过-version选项可以查看版本信息
8.3.3.4 macOS版Java8使用JAVA_HOME环境变量配置PATH环境变量
Q:为什么Java8要使用JAVA_HOME配置Path环境变量
A:切换JDK版本时只需要修改JAVA_HOME环境变量的值即可
- 启动iTerm
- 打开.zshrc配置文件
在终端上输入vim .zshrc命令回车后打开家目录的.zshrc配置文件
打开以后看到Java8的JAVA_HOME环境变量的配置、QQ的PATH环境变量配置以及Java8的PATH环境变量配置
- 编辑.zshrc配置文件
此时vim处于命令模式无法编辑文件内容,需要将输入法切换到英文状态后再按i键由命令模式切换到编辑模式
然后使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java8的PATH环境变量
# 使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java8的PATH环境变量
export PATH=$PATH:$JAVA_HOME/bin
使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java8的PATH环境变量后按esc键由编辑模式切换到命令模式
- 保存并退出vim
输入法在英文状态下输入:切换到底行模式,再输入wq回车后保存并退出vim
成功保存并退出vim
- 重新加载.zshrc配置文件
在加载.zshrc配置文件之前先在终端上输入echo $PATH查看系统PATH环境变量,发现系统PATH环境变量中包含Java8的PATH环境变量配置
输入source .zshrc 命令并回车,重新加载.zshrc配置文件,让当前Shell环境中设置的PATH环境变量立即生效
- 验证配置
在终端上输入echo $PATH命令查看系统的PATH环境变量,如果PATH环境变量包含了Java8则表示配置成功
细心的同学会发现在系统PATH环境变量中QQ的PATH环境变量和Java8的PATH环境变量都被加载了两次,因为每执行一次source .zshrc命令,它们都会被加载一次到当前Shell环境中
如果重新开启新的终端,在终端上输入echo $PATH则会看到QQ的PATH环境变量以及Java8的PATH环境变量只加载一次
8.4 macOS版Java8卸载
Q:什么时候需要卸载Java8
A:如果不再使用(例如公司项目全部使用Java17开发)Java8时就可以将其卸载
Oracle ARM64位架构macOS版Java8卸载需要删除Java8相关的目录以及文件,除此以外还要删除.zshrc配置文件,.zshrc配置文件配置了Java8的JAVA_HOME环境变量和PATH环境变量
8.4.1 删除Java8相关的目录和文件
Java8相关的目录和文件 | 说明 |
---|---|
/Library/Java/JavaVirtualMachines/jdk-1.8.jdk | Java8安装目录 |
/Library/Application Support/Oracle/Java | Java8支持目录 |
/Library/PreferencePanes/JavaControlPanel.prefPane | Java8控制面板首选项 |
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin | Java8 Applet插件 |
/Library/Java/JavaVirtualMachines/jdk-1.8.jdk,该目录是Java8安装目录
/Library/Application Support/Oracle/Java,该目录是Java8支持目录
/Library/PreferencePanes/JavaControlPanel.prefPane,该文件是Java8控制面板首选项
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin,该文件是Java8 Applet 插件
删除Java8相关的目录和文件需要使用管理员权限在终端上使用rm命令结合 -rf选项实现
- 启动终端
- 删除Java8安装目录
删除Java8安装目录需要使用sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-1.8.jdk
命令来完成。首次执行sudo rm -rf前需要输入用户的开机密码
- 删除Java8应用程序支持目录
删除Java8应用程序支持目录需要在终端上执行sudo rm -rf /Library/Application\ Support/Oracle/
Java命令
- 删除Java8控制面板首选项
Java8 控制面板位于系统设置>Java
删除java8控制面板首选项需要在终端上执行 sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane 命令
删除完成后重新打开系统设置,系统设置的Java控制面板也会删除
- 删除Java8 Applet插件
删除Java8 Applet插件需要在终端上执行sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin命令
8.4.2 删除配置文件
- 启动终端
- 删除配置文件.zshrc
删除Java8环境变量配置文件.zshrc需要在终端上执行rm -f .zshrc命令
- 验证Java8是否卸载成功
删除.zshrc文件后,在终端的任意路径使用javac -version和java -version查看Java编译器和Java解释器版本信息,
如果提示The operation couldn’t be completed. Unable to locate a Java Runtime. Please visithttp://www.java.comfor information on installing Java.表示Java8卸载成功
9 macOS版Java17开发环境搭建
9.1 macOS版Java17下载
- 访问Java的官网,其访问地址是https://www.oracle.com/java/
- 点击右上角的Download Java,跳转到Java的下载界面
Java的下载地址是https://www.oracle.com/java/technologies/downloads/
目前(2024/08/12)Oracle官方提供最新可用的Java版本(JDK版本)是Java22、Java21 和Java17,最新的LTS版本是Java21
本次我们下载的是Java17,所以点击JDK17 切换到Java17的下载
这是 NFTC 计划的 JDK 17 的最后一次更新。 2024 年 9 月之后的更新将根据 Java SE OTN 许可证 (OTN) 进行许可,超出 OTN 许可证有限免费授权的生产使用将需要付费。
根据 Oracle 免费条款和条件 (NFTC),JDK 17 二进制文件可以在生产中免费使用,并且可以免费重新分发。
目前Java17支持三个操作系统
- Linux
- macOS
- Windows
大家在下载Java17的时候需要根据自己所使用CPU和操作系统的版本选择对应版本的Java17
macOS Sonoma可以点击左上角的苹果菜单>关于本机
在弹出的面板中查看系统版本信息
目前本机使用的系统是macOS Sonoma 14.6.1,芯片是M1 Max
- 根据CPU架构和系统版本选择Java17
如果你的Mac电脑使用的Intel CPU,那么选择Oracle macOS版 x64 DMG Installer的jdk-17_macos-x64_bin.dmg** **
如果你的电脑使用的是Apple CPU,例如M1 Max,M1 Ultra,M2 Max,M2 Ultra,M3 Max等等,那么选择Oracle macOS版ARM64 DMG Installer的jdk-17_macos-aarch64_bin.dmg
由于本机使用的是Apple M1 Max CPU,因此选择macOS版ARM64 DMG Installer的jdk-17_macos-aarch64_bin.dmg
下载Oracle ARM64位架构macOS版Java17时目前不需要同意许可协议以及注册、登录Oracle账号
点击https://download.oracle.com/java/17/latest/jdk-17_macos-aarch64_bin.dmg ( sha256)下载Oracle官方提供的ARM 64位架构macOS版Java17
使用快捷键 Option+Command+L 可以打开下载内容
点击更多操作
点击下载未经验证的文件
下载完成后点击在Finder中显示
默认在下载目录(/Users/liuguanglei/Downloads)下会看到Java17的安装包jdk-17_macos-aarch64_bin.dmg
9.2 macOS版Java17安装
9.2.1 macOS版Java17安装过程
- 双击Java17安装包jdk-17_macos-aarch64_bin.dmg
- 双击JDK 17.0.12.pkg启动安装器
- 介绍
点击继续
- 目的宗卷
你要如何安装此软件?默认选择为这台电脑上的所有用户安装
选择一个目的宗卷:为这台电脑上的所有用户安装,点击继续
- 安装类型
默认选择标准安装,点击安装即可
安装之前安装器会提示 "安装器"正在尝试安装新软件 使用触控ID或输入密码以允许此次操作
输入密码或者使用TouchID后安装器就会开始安装,安装过程几秒钟就可以完成
- 安装完成
安装完成后可以点①击访问JavaSE文档和②关闭
- 访问JavaSE文档:跳转到Java17的官方文档
- 关闭:关闭安装向导,完成Java17安装
关闭安装向导时还会提示你要将“JDK 17.0.12”安装器移到废纸篓吗?,建议点击保留,这样下次重装时不需要重新下载Java17
- 推出桌面的JDK 17.0.12
选中桌面的JDK 17.0.12,然后右键推出即可,当然也可以使用快捷键Command+E推出
推出成功
9.2.2 macOS版Java17安装目录
默认情况下Oracle ARM64位架构macOS版Java17安装目录是/Library/Java/JavaVirtualMachines/jdk-17.jdk
依次点击访达>前往>前往文件夹,快捷键是Shift+Command+G
输入路径/Library/Java/JavaVirtualMachines/jdk-17.jdk
后回车
可以进入该目录
不过我们需要了解的是/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home目录
Java17 Home目录说明
目录 | 说明 |
---|---|
bin | 该目录下主要存放JDK的各种工具命令,例如javac和java |
conf | 该目录下主要存放JDK相关的配置文件 |
include | 该目录下主要存放一些平台的头文件 |
jmods | 该目录下主要存放JDK的各种模块 |
legal | 该目录下主要存放JDK各模块的授权文档 |
lib | 该目录下主要存放JDK工具的一些补充jar包和源代码,Java源码src.zip在该目录下 |
作为Java初学者来说,目前只需要关注bin目录和lib文件夹中的src.zip压缩文件
- bin目录:存放Java提供的开发工具,例如javac,java,javadoc,javap等等
- src.zip:存放Java源代码文件(.java结尾的文件)
可以双击src.zip解压后查看,默认解压在下载目录
src目录存放的是Java源代码文件(.java结尾)
例如查看String.java
String.java源文件在src/java.base/java/lang目录下
然后选择src/java.base/java/lang/String.java
Visual Studio Code是一个跨平台的文本编辑器,需要自己下载、安装后才能使用
使用Visual Studio Code文本编辑器打开String.java
9.3 macOS版Java17配置
9.3.1 macOS版Java17配置说明
当Oracle ARM64位架构macOS版Java17安装完成后,你会发现没有配置PATH环境变量,也可以在终端的任意路径下使用javac和java,例如javac和java通过 -version选项查看Java编译器和解释器版本信息
没有配置JAVA_HOME环境变量,也可以在终端的maven bin目录(/Users/liuguanglei/workspace/soft/java/apache-maven-3.9.8/bin)下使用maven命令 mvn --version查看Maven版本信息以及依赖的Java环境信息,其中./表示当前路径
Q:这样是不是意味着不需要配置Java17的PATH环境变量和JAVA_HOME环境变量
A:依然需要配置,因为后期我们会使用多个不同版本的JDK,例如在公司开发项目时使用Java8,而学习Java新特性时使用Java17或者Java21,那么就会有切换Java版本的需求,因此还需要配置Java17的PATH环境变量和JAVA_HOME环境变量。
9.3.2 macOS版Java17配置JAVA_HOME环境变量
JAVA_HOME指的就是Java17的Home目录(/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home)
配置JAVA_HOME环境变量的目的就是方便配置Java的PATH环境变量以及通过修改JAVA_HOME环境变量实现在终端上切换不同版本的Java,例如Java8和Java17的相互切换,Java17和Java21的相互切换。
- 启动Visual Studio Code
点击Welcome
取消勾选Show welcome page on startup
然后关闭Welcome
- 打开/Users/liuguanglei目录
Visual Studio Code想要访问桌面文件夹中的文件,点击允许
Visual Studio Code想要访问其他App的数据,点击允许
Visual Studio Code想要访问文稿文件夹中的文件,点击允许
Visual Studio Code想要访问受iCloud云盘管理的文件,点击允许
“Visual Studio Code”想访问你的提醒事项。点击允许
勾选信任作者
- 创建配置文件
macOS Sonoma使用的Shell是zsh,因此在家目录(/Users/liuguanglei)下创建.zshrc配置文件
在文件资源管理器右键New File
设置文件名为.zshrc后回车
Visual Studio Code会自动打开.zshrc配置文件
- 编辑.zshrc配置文件
在.zshrc文件中配置Oracle ARM64位架构macOS版Java17的JAVA_HOME环境变量
# 配置Oracle ARM64位架构macOS版Java17的JAVA_HOME环境变量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
配置完成后按Command+S保存文件
- 打开终端
依次点击Visual Studio Code菜单栏的Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
在终端上输入 echo $JAVA_HOME命令回车
如果能够输出Java17的Home目录(/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home),则表示Java17的JAVA_HOME环境变量配置成功
9.3.3 macOS版Java17配置PATH环境变量
9.3.3.1 PATH环境变量介绍
PATH环境变量的本质就是一系列路径,例如/bin,/usr/bin,/usr/local/bin等等,多个路径之间使用冒号(:)隔开,macOS下可以在终端上输入echo $PATH命令回车后查看系统PATH环境变量
PATH环境变量的作用就是在终端上执行命令时,系统会从当前路径和PATH环境变量配置的路径下查找命令对应的可执行程序,然后执行该程序。
例如date命令可以查看系统日期,而where date 可以查看到date命令对应的可执行程序路径,正因为/bin目录在PATH环境变量中,因此在终端输入date命令实际上执行的是/bin目录下的date程序
如果输入一个不存在的命令,那么shell会提示command not found,因为在PATH环境变量对应的路径下找不到一个名为datexxx的命令(程序)
9.3.3.2 PATH环境变量的使用
需求:实现在macOS终端(例如内置终端和第三方终端iTerm)的任意路径下输入WeChat就可以启动微信
此次测试的微信版本为Version. 3.8.8 (28486)
- 找到微信安装目录
macOS系统中所有的软件都安装在访达的应用程序
选择QQ,右键 显示包内容
此时会打开Contents目录
而在Contents/MacOS下刚好有个WeChat,它是一个Unix可执行文件
只要将它所在的路径(/Applications/WeChat.app/Contents/MacOS)配置在PATH环境变量中即可实现在终端的任意路径下输入QQ就可以启动微信
- 启动Visual Studio Code
- 打开.zshrc文件
点击.zshrc配置文件
打开后可以看到Java17的JAVA_HOME环境变量的配置
- 编辑.zshrc配置文件
在.zshrc配置文件中添加微信的PATH环境变量配置
# 配置微信的PATH环境变量
export PATH=$PATH:/Applications/WeChat.app/Contents/MacOS
配置完成后按Command+S保存配置
- 验证配置
打开终端
先在终端输入echo $PATH查看PATH环境变量,PATH环境变量必须包含QQ的PATH环境变量配置
然后在终端的任意路径输入WeChat回车后看是否能够启动成功
如果能够启动微信则表示微信的PATH环境变量配置成功
在用户家目录启动微信
在系统根目录启动微信
终止命令运行可以使用Control+c
9.3.3.3 macOS版Java17配置PATH环境变量
- 启动Visual Studio Code
- 打开/Users/liuguanglei目录
- 打开.zshrc配置文件
打开后可以看到Java17的JAVA_HOME环境变量的配置以及微信的PATH环境变量配置
- 编辑.zshrc配置文件
配置Oracle ARM64位架构macOS版Java17的PATH环境变量
# 配置Oracle ARM64位架构macOS版Java17的PATH环境变量
export PATH=$PATH:/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/bin
配置完成后按Command+S保存
- 启动终端
依次点击Visual Studio Code菜单栏的New Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
首先在终端的任意路径下执行echo $PATH查看系统PATH环境变量
如果系统PATH环境变量中包含Java17的PATH环境变量则表示Java17的PATH环境变量配置成功
然后在终端的任意路径使用Java提供的javac和java结合-version选项查看Java编译器和解释器的版本信息应该为Java17
9.3.3.4 macOS版Java17使用JAVA_HOME配置PATH环境变量
Q:为什么Java17要使用JAVA_HOME配置Path环境变量
A:切换JDK版本时只需要修改JAVA_HOME环境变量的值即可
- 启动Visual Studio Code
- 打开/Users/liuguanglei目录
- 打开.zshrc配置文件
.zshrc配置文件位于/Users/liuguanglei目录下
- 编辑.zshrc配置文件
使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java17的PATH环境变量
# 使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java17的PATH环境变量
export PATH=$PATH:$JAVA_HOME/bin
配置完成后按Command+S保存
- 打开终端
依次点击Visual Studio Code菜单栏Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
首先在终端的任意路径下执行echo $PATH查看系统PATH环境变量,如果PATH环境变量包含Java17的PATH环境变量配置则表示Java17的PATH环境变量配置成功
然后在终端的任意路径使用Java提供的javac和java命令结合-version选项查看Java编译器和解释器的版本信息应该是Java17
9.4 macOS版Java17和Java8相互切换
9.4.1 如何实现macOS版Java17和Java8相互切换
由于开发项目时使用Java8,但是学习Java17新特性或者使用Spring Boot 3时安装了Java17,因此此时Mac电脑上同时存在两个不同版本的JDK,分别是Oracle ARM64位架构macOS版的Java8和Java17。
那么如何在这两个版本中间切换?
首先需要知道当前使用的Java版本
在终端的任意路径通过javac -version和java -version得知目前使用的是Java17
Q:为什么是Java17?
A:因为在.zshrc配置文件中JAVA_HOME环境变量的值是Java17的Home目录(/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home),而Java的PATH环境变量引用了JAVA_HOME环境变量,因此当前Java版本是Java17
那么想要实现Java8和Java17相互切换,只需要修改JAVA_HOME环境变量的变量值即可
9.4.2 macOS版Java17切换到Java8
想要从Java17切换到Java8,只需要将JAVA_HOME环境变量的变量值修改成Java8的Home路径(/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home)
- 启动Visual Studio Code
- 打开/Users/liuguanglei目录
- 打开.zshrc配置文件
.zshrc配置文件位于/Users/liuguanglei目录下
- 编辑.zshrc配置文件
将JAVA_HOME环境变量的变量值修改成Java8的Home目录(/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home)
# 配置Oracle ARM64位架构macOS版Java8的JAVA_HOME环境变量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
# 配置微信的PATH环境变量
export PATH=$PATH:/Applications/WeChat.app/Contents/MacOS
# 使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java8的PATH环境变量
export PATH=$PATH:$JAVA_HOME/bin
配置完成后按Command+S保存
- 启动终端
依次点击Visual Studio Code菜单栏的New Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
首先在终端的任意路径输入echo $JAVA_HOME,查看JAVA_HOME环境变量的变量值是否为Java8的Home目录
然后在终端的任意路径使用Java提供的javac和java命令结合-version选项查看Java编译器和解释器的版本信息是否为Java8,如果是Java8则表示当前Java版本成功从Java17切换到Java8
9.4.3 macOS版Java8切换到Java17
从Java8再次切换到Java17,只需要将JAVA_HOME环境变量的变量值改成Java17的Home目录(/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home)
- 启动Visual Studio Code
- 打开/Users/liuguanglei目录
- 打开.zshrc配置文件
.zshrc配置文件位于/Users/liuguanglei目录下
- 编辑.zshrc配置文件
# 配置Oracle ARM64位架构macOS版Java17的JAVA_HOME环境变量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
# 配置微信的PATH环境变量
export PATH=$PATH:/Applications/WeChat.app/Contents/MacOS
# 使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java17的PATH环境变量
export PATH=$PATH:$JAVA_HOME/bin
配置完成后按Command+S保存
- 启动终端
依次点击Visual Studio Code菜单栏的New Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
首先在终端的任意路径输入echo $JAVA_HOME,查看JAVA_HOME环境变量的变量值是否为Java17的Home目录
然后在终端的任意路径使用Java提供的javac和java命令结合-version选项查看Java编译器和解释器的版本信息是否为Java17,如果是Java17则表示当前Java版本成功从Java8切换到Java17
9.5 macOS版Java17卸载
Q:什么时候需要卸载Java17
A:如果不再使用(例如公司项目全部使用Java21开发)Java17时就可以将其卸载
Oracle ARM64位架构macOS版Java17卸载需要删除Java17安装目录
除此以外还要删除.zshrc配置文件,.zshrc配置文件中包含Java17的PATH环境变量和JAVA_HOME环境变量配置
9.5.1 删除Java17安装目录
Oracle ARM64位架构macOS版Java17的安装目录是/Library/Java/JavaVirtualMachines/jdk-17.jdk
选择jdk-17.jdk,右键>移除到废纸篓
然后使用Touch ID或者使用密码
这样就可以将Java17的安装目录移动到废纸篓
使用command+Shift+delete清空废纸篓
删除成功后JavaVirtualMachines目录下看不到Java17的安装目录
9.5.2 删除配置文件
- 启动Visual Studio Code
- 打开/Users/liuguanglei文件夹
点击Move to Trash
.zshrc配置文件删除成功
- 验证Java17是否卸载成功
删除Java17安装目录以及.zshrc配置文件后
在终端的任意路径使用javac -version和java -version查看Java编译器和Java解释器版本信息,如果提示The operation couldn’t be completed. Unable to locate a Java Runtime. 表示Java17卸载成功
10 macOS版Java21开发环境搭建
10.1 macOS版Java21下载
- 访问Java的官网,其访问地址是https://www.oracle.com/java/
- 点击右上角的Download Java,跳转到Java的下载界面
Java的下载地址是https://www.oracle.com/java/technologies/downloads/
目前(2024/08/12)Oracle官方提供最新可用的Java版本(JDK版本)是Java22、Java21 和Java17,最新的LTS版本是Java21
本次我们下载的是Java21,所以点击JDK21 切换到Java21的下载
根据 Oracle 免费条款和条件 (NFTC),JDK 21 二进制文件可以在生产中免费使用,并且可以免费重新分发。
JDK 21 将根据 NFTC 接收更新,直到 2026 年 9 月,即下一个 LTS 发布一年后。后续的 JDK 21 更新将根据 Java SE OTN 许可证 (OTN) 进行许可,并且超出 OTN 许可证有限免费授予的生产使用将需要付费。
目前Java21支持三个操作系统
- Linux
- macOS
- Windows
大家在下载Java21的时候需要根据自己所使用CPU和操作系统的版本选择对应版本的Java21
** **
macOS Sonoma可以点击左上角的苹果菜单
在弹出的面板中查看系统版本信息
目前本机使用的系统是macOS Sonoma 14.6.1,芯片是M1 Max
- 根据CPU架构和系统版本选择Java21
如果你的Mac电脑使用的Intel CPU,那么选择macOS版 x64 DMG Installer的jdk-21_macos-x64_bin.dmg
如果你的电脑使用的是Apple CPU,例如M1 Max,M1 Ultra,M2 Max,M2 Ultra,M3 Max等等,那么选择macOS版ARM64 DMG Installer的jdk-21_macos-aarch64_bin.dmg** **
由于本机使用的是Apple M1 Max CPU,因此选择macOS版ARM64 DMG Installer的jdk-21_macos-aarch64_bin.dmg** **
下载Oracle ARM架构 64位macOS版Java21时目前不需要同意许可协议以及注册、登录Oracle账号
点击https://download.oracle.com/java/21/latest/jdk-21_macos-aarch64_bin.dmg下载Oracle** ARM64位架构macOS版Java21**
使用快捷键 Option+Command+L 可以打开下载内容,查看下载的速度以及所需的时间
当Java21下载完成后,点击在Finder中显示
** 默认在下载目录(/Users/liuguanglei/Downloads)下会看到Java21的安装包jdk-21_macos-aarch64_bin.dmg**
10.2 macOS版Java21安装
10.2.1 macOS版Java21安装过程
- 双击Java21安装包jdk-21_macos-aarch64_bin.dmg
- 双击JDK 21.0.4.pkg启动安装器
- 介绍
点击继续
- 目的宗卷
你要如何安装此软件?默认选择为这台电脑上的所有用户安装
选择一个目的宗卷:为这台电脑上的所有用户安装,点击继续
- 安装类型
默认选择标准安装,点击安装即可
安装之前安装器会提示 "安装器"正在尝试安装新软件 使用触控ID或输入密码以允许此次操作
输入密码或者使用TouchID后安装器就会开始安装,安装过程几秒钟就可以完成
- 安装完成
安装完成后可以点击访问JavaSE文档和关闭
- 访问JavaSE文档:跳转到Java21的官方文档
- 关闭:关闭安装向导,完成Java21安装
关闭安装向导时还会提示你要将“JDK 21.0.4”安装器移到废纸篓吗?,建议点击保留,这样下次重装时不需要重新下载Java21
- 推出桌面的JDK 21.0.4
选中桌面的JDK 21.0.4,然后右键推出即可,当然也可以使用快捷键Command+E推出
推出成功
10.2.2 macOS版Java21安装目录
默认情况下Oracle ARM64位架构macOS版Java21安装目录是/Library/Java/JavaVirtualMachines/jdk-21.jdk
依次点击访达>前往>前往文件夹,快捷键是Shift+Command+G
输入路径/Library/Java/JavaVirtualMachines/jdk-21.jdk后回车
不过我们需要了解的是/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home目录
Java21 Home目录说明
目录 | 说明 |
---|---|
bin | 该目录下主要存放JDK的各种工具命令,例如javac和java |
conf | 该目录下主要存放JDK相关的配置文件 |
include | 该目录下主要存放一些平台的头文件 |
jmods | 该目录下主要存放JDK的各种模块 |
legal | 该目录下主要存放JDK各模块的授权文档 |
lib | 该目录下主要存放JDK工具的一些补充jar包和源代码,Java源码src.zip在该目录下 |
man | 该目录下主要是存放JDK的帮助文档 |
作为Java初学者来说,目前只需要关注bin目录和lib文件夹中的src.zip压缩文件
- bin目录:存放Java提供的开发工具,例如javac,java,javadoc,javap等等
- src.zip:存放Java源代码文件(.java结尾的文件)
可以双击src.zip解压后查看,默认解压在下载目录
src目录存放的是Java源代码文件(.java结尾)
例如查看String.java
String.java源文件在src/java.base/java/lang目录下
然后选择src/java.base/java/lang/String.java
Visual Studio Code是一个跨平台的文本编辑器,需要自己下载、安装后才能使用
使用Visual Studio Code文本编辑器打开String.java
10.3 macOS版Java21配置
10.3.1 macOS版Java21配置说明
当Oracle ARM64位架构macOS版Java21安装完成后,你会发现没有配置PATH环境变量,也可以在终端的任意路径下使用javac和java,例如javac和java通过 -version选项查看Java编译器和解释器的版本信息
没有配置JAVA_HOME环境变量,也可以在终端的maven bin目录(/Users/liuguanglei/workspace/soft/java/apache-maven-3.9.6/bin)下使用maven命令 mvn --version查看Maven版本信息以及依赖的Java环境信息,其中./表示当前路径
Q:这样是不是意味着不需要配置Java21的PATH环境变量和JAVA_HOME环境变量?
A:依然需要配置,因为后期我们会使用多个不同版本的JDK,例如在公司开发项目时使用Java8,而学习Java新特性时使用Java17或者Java21,那么就会有切换Java版本的需求,因此还需要配置Java21的PATH环境变量和JAVA_HOME环境变量。
10.3.2 macOS版Java21配置JAVA_HOME环境变量
JAVA_HOME指的就是Java21的Home目录(/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home)
配置JAVA_HOME环境变量的目的就是方便配置Java的PATH环境变量以及通过修改JAVA_HOME环境变量实现在终端上切换不同版本的Java,例如Java8和Java17的相互切换,Java17和Java21的相互切换。
- 启动Visual Studio Code
- 打开/Users/liuguanglei目录
** **
- 创建配置文件
macOS Sonoma使用的Shell是zsh,因此在家目录(/Users/liuguanglei)下创建.zshrc配置文件
在文件资源管理器右键New File
设置文件名为.zshrc后回车
Visual Studio Code会自动打开.zshrc配置文件
- 在配置文件中添加Java21的JAVA_HOME环境变量
**在.zshrc文件中配置Oracle ARM64位架构macOS版Java21的JAVA_HOME环境变量 **
# 配置Oracle ARM64位架构macOS版Java21的JAVA_HOME环境变量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
配置完成后按Command+S保存文件
- 打开终端
依次点击Visual Studio Code菜单栏的Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
在终端上输入 echo $JAVA_HOME命令回车后
如果能够输出Java21的Home目录(/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home ),则表示Java21的JAVA_HOME环境变量配置成功
10.3.3 macOS版Java21配置PATH环境变量
10.3.3.1 PATH环境变量介绍
**PATH环境变量的本质就是一系列路径,例如/bin,/usr/bin,/usr/local/bin等等,多个路径之间使用冒号(:)隔开,macOS下可以在终端上使用echo $PATH查看系统PATH环境变量 **
PATH环境变量的作用就是在终端上执行命令时,系统会从当前路径和PATH环境变量配置的路径下查找命令对应的可执行程序,然后执行该程序。
例如date命令可以查看系统日期,而where date 可以查看到date命令对应的可执行程序路径,正因为/bin目录在PATH环境变量中,因此在终端输入date命令实际上执行的是/bin目录下的date程序
如果输入一个不存在的命令,那么shell会提示command not found,因为在PATH环境变量对应的路径下找不到一个名为datexxx的命令(程序)
10.3.3.2 PATH环境变量的使用
需求:实现在macOS终端(例如内置终端和第三方终端iTerm)的任意路径下输入DingTalk就可以启动钉钉
此次测试的钉钉版本为Version 7.6.3 (38842528)
- 找到钉钉安装目录
macOS系统中所有的软件都安装在访达的应用程序
选择钉钉,右键 显示包内容
此时会打开Contents目录
而在Contents/MacOS下刚好有个QQ,它是一个Unix可执行文件
只要将它所在的路径(/Applications/DingTalk.app/Contents/MacOS)配置在PATH环境变量中即可实现在终端的任意路径下输入DingTalk就可以启动钉钉
- 启动Visual Studio Code
- 打开/Users/liuguanglei目录
- 打开.zshrc配置文件
.zshrc配置文件位于/Users/liuguanglei目录下
- 编辑.zshrc配置文件
配置钉钉的PATH环境变量
# 配置钉钉的PATH环境变量
export PATH=$PATH:/Applications/DingTalk.app/Contents/MacOS
配置完成后按Command+S保存
- 打开终端
依次点击Visual Studio Code菜单栏的New Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
在终端的任意路径下执行echo $PATH查看系统PATH环境变量
如果系统PATH环境变量中是否已经包含钉钉的PATH环境变量配置则表示钉钉的PATH环境变量配置成功
然后在终端的任意路径输入QQ回车后看是否能够启动成功
如果能够启动QQ则表示QQ的PATH环境变量配置成功
在用户的家目录启动钉钉
在根目录下启动钉钉
10.3.3.3 macOS版Java21配置PATH环境变量
- 启动Visual Studio Code
- 打开/Users/liuguanglei目录
- 打开.zshrc配置文件
.zshrc配置文件位于/Users/liuguanglei目录下
- 编辑.zshrc配置文件
配置Oracle ARM64位架构macOS版Java21的PATH环境变量
# 配置Oracle ARM64位架构macOS版Java21的PATH环境变量
export PATH=$PATH:/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/bin
配置完成后按Command+S保存
- 启动终端
依次点击Visual Studio Code菜单栏的New Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
首先在终端的任意路径下执行echo $PATH查看系统PATH环境变量,如果系统PATH环境变量中包含Java21的PATH环境变量则表示Java21的PATH环境变量配置成功
然后在终端的任意路径使用Java提供的javac和java结合-version选项查看Java编译器和解释器的版本信息应该为Java21
10.3.3.4 macOS版Java21使用JAVA_HOME配置PATH环境变量
Q:为什么Java21要使用JAVA_HOME配置Path环境变量
A:切换JDK版本时只需要修改JAVA_HOME环境变量的变量值即可
- 启动Visual Studio Code
- 打开/Users/liuguanglei目录
- 打开.zshrc配置文件
.zshrc配置文件位于/Users/liuguanglei目录下
- 编辑.zshrc配置文件
使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java21的PATH环境变量
# 使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java21的PATH环境变量
export PATH=$PATH:$JAVA_HOME/bin
配置完成后按Command+S保存文件
- 启动终端
依次点击Visual Studio Code菜单栏的New Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
首先在终端的任意路径下执行echo $PATH查看系统PATH环境变量
如果PATH环境变量包含Java21的PATH环境变量配置则表示Java21的PATH环境变量配置成功
然后在终端的任意路径使用Java提供的javac和java命令结合-version选项查看Java编译器和解释器的版本信息应该是Java21
10.4 macOS版Java21和Java17相互切换
10.4.1 如何实现macOS版Java21和Java17相互切换
由于开发项目时使用Java17,但是学习JDK新特性时安装了Java21,因此此时电脑上同时存在两个不同版本的JDK,分别是Oracle ARM64位架构macOS版本的Java17和Java21。
那么如何在这两个版本中间切换?
首先需要知道当前使用的Java版本
在终端的任意路径通过javac -version和java -version得知目前使用的是Java21
Q:为什么是Java21?
A:因为在.zshrc配置文件中JAVA_HOME环境变量的值是Java21的Home目录(/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home),而Java的PATH环境变量引用了JAVA_HOME环境变量
那么想要实现Java17和Java21相互切换,只需要修改JAVA_HOME环境变量的值即可
10.4.2 macOS版Java21切换到Java17
想要从Java21切换到Java17,只需要将JAVA_HOME环境变量的值修改成Java17的Home路径(/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home)
- 启动Visual Studio Code
- 打开/Users/liuguanglei目录
- 打开.zshrc配置文件
.zshrc配置文件位于/Users/liuguanglei目录下
- 编辑.zshrc配置文件
配置Oracle ARM64位架构macOS版Java17的PATH环境变量
# 配置Oracle ARM64位架构macOS版Java17的JAVA_HOME环境变量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
# 配置钉钉的PATH环境变量
export PATH=$PATH:/Applications/DingTalk.app/Contents/MacOS
# 使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java17的PATH环境变量
export PATH=$PATH:$JAVA_HOME/bin
配置完成后按Command+S保存
- 启动终端
依次点击Visual Studio Code菜单栏的New Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
首先在终端的任意路径输入echo $JAVA_HOME,查看JAVA_HOME环境变量的变量值是否为Java17的Home目录
然后在终端的任意路径使用Java提供的javac和java命令结合-version选项查看Java编译器和解释器的版本信息是否为Java17,如果是Java17则表示当前Java版本成功从Java21切换到Java17
10.4.3 macOS版Java17切换到Java21
从Java17再次切换到Java21,只需要将JAVA_HOME环境变量的变量值改成Java21的Home目录(/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home )
- 启动Visual Studio Code
- 打开/Users/liuguanglei目录
- 打开.zshrc配置文件
.zshrc配置文件位于/Users/liuguanglei目录下
- 编辑.zshrc配置文件
# 配置Oracle ARM64位架构macOS版Java21的JAVA_HOME环境变量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
# 配置QQ的PATH环境变量
export PATH=$PATH:/Applications/QQ.app/Contents/MacOS
# 使用JAVA_HOME环境变量配置Oracle ARM64位架构macOS版Java21的PATH环境变量
export PATH=$PATH:$JAVA_HOME/bin
配置完成后按Command+S保存
- 启动终端
依次点击Visual Studio Code菜单栏的New Terminal>New Terminal
就可以启动Visual Studio Code内置的终端
- 验证配置
首先在终端的任意路径输入echo $JAVA_HOME,查看JAVA_HOME环境变量的变量值是否为Java21的Home目录
然后在终端的任意路径使用Java提供的javac和java命令结合-version选项查看Java编译器和解释器的版本信息是否为Java21,如果是Java21则表示当前Java版本成功从Java17切换到Java21
10.5 macOS版Java21卸载
Q:什么时候需要卸载Java21
A:如果不再使用(例如公司未来的项目全部使用Java25开发)Java21时就可以将其卸载
Oracle ARM64位架构macOS版Java21卸载需要删除Java21安装目录
除此以外还要删除.zshrc配置文件,.zshrc配置文件配置了Java21的PATH环境变量和JAVA_HOME环境变量。
10.5.1 删除Java21安装目录
Oracle ARM64位架构macOS版Java21的安装目录是/Library/Java/JavaVirtualMachines/jdk-21.jdk
选中jdk-21.jdk,右键移到废纸篓,删除Java21的安装目录
然后使用Touch ID或者使用密码
然后右键清倒废纸篓
确认清倒废纸篓
删除成功后JavaVirtualMachines目录下看不到Java21的安装目录
10.5.2 删除配置文件
- 启动Visual Studio Code
- 打开/Users/liuguanglei
- 删除.zshrc配置文件
选择.zshrc配置文件,右键选择Delete
点击 Move to Trash
- 验证Java21是否卸载成功
删除Java21安装目录以及.zshrc文件后,在终端的任意路径使用javac -version和java -version查看Java编译器和Java解释器版本信息
如果提示**The operation couldn’t be completed. Unable to locate a Java Runtime.Please visit **http://www.java.comfor information on installing Java. 表示Java21卸载成功
11 第一个Java程序开发
11.1 Java程序开发流程
- 编写:使用Java开发工具编写源文件,源文件以.java结尾,用于存储Java代码
- 编译:使用javac**把源文件编译生成字节码文件,字节码文件以.class结尾,字节码文件名和类名相同,字节码文件的数量和源文件中class的数量相同,**编译的格式是javac 源文件名.java,例如
javac HelloWorld.java
- 运行:使用java解释运行编译生成后的字节码文件,**运行的格式是java 字节码文件名(不需要.class后缀),例如
java HelloWorld
Q:如何看待Java是一门半编译半解释型的语言?
A:半编译半解释指的是JVM在解释执行既有解释器解释执行,又有JIT编译器编译执行
11.2 Java开发工具
工欲善其事,必先利其器
虽然JDK提供了开发Java程序时所用到的一些工具,例如javac,java,jconsole,jdb等等
但是JDK并没有提供编写Java代码的开发工具,因此想要在编写Java程序之前,还需要了解Java开发工具, 我这里把Java开发工具分成两类,分别是文本编辑器和IDE(Integrated Development Environment)
常用的文本编辑器有记事本、Visual Studio Code、Sublime Text
Visual Studio Code
Sublime Text
Visual Studio Code和Sublime Text都是高级的文本编辑器,而且是跨平台的(Windows,macOS,Linux),建议没有任何编程经验的朋友可以使用Visual Studio Code来开发Java程序,因为相比IDE而言更加轻量级,对初学者更加容易上手。
常用的Java IDE(Integrated Development Environment) 有IntelliJ IDEA和Eclipse
IntelliJ IDEA
Eclipse
IDEA和Eclipse都是IDE,IDE集成项目开发中常用的功能,包括编辑器、编译工具、反编译工具、测试工具、性能分析工具、部署工具等等,因此可以大大提高开发效率。
目前大部分互联网公司基本普遍都会使用IntelliJ IDEA开发Java项目,因此我们后期会全程使用IntelliJ IDEA。
11.3 Windows版第一个Java程序开发与详解
11.3.1 Windows版第一个Java程序开发
在学习任何一门编程语言时编写的第一个程序通常都称为HelloWorld,如果你能够编写并且运行HelloWorld,那么意味着已经迈入编程的大门
本次我们使用比较原始的开发方式:也就是基于记事本+Windows终端(命令提示符)+JDK提供的开发工具(javac和java)来开发人生第一个Java程序,这种方式虽然和使用IDE开发相比效率比较低,但是能够让初学者更加直观地理解Java程序的开发和运行流程。
- 检查Java开发环境
在开发第一个Java程序之前先要检查Java开发环境:即安装、配置JDK
目前本机已经安装四个不同版本的Java,分别是Java8、Java11、Java17、Java21,它们都是官方长期支持版
那么到底是使用哪个版本,是由PATH环境变量决定的
从系统属性>环境变量>系统变量>Path环境变量得知目前使用的Java版本为Java21,因为JAVA_HOME配置的是Java21的目录,而且Java的Path环境变量引用JAVA_HOME环境变量
也可以在终端上使用Java提供的javac、java命令,这两个命令提供了-version选项查看版本信息
-
javac -version查看Java编译器的版本信息
-
java -version查看Java解释器的版本信息
- 新建code文件夹
在D盘目录下,鼠标右键新建>文件夹
将文件夹的名称由默认的新建文件夹重命名为code,用于存放Java源文件
- 显示文件后缀名
默认情况下Windows是隐藏已知文件扩展名
在新建源文件之前依次点击查看>显示>文件扩展名,勾选文件扩展名,这样才能显示文件扩展名
- 新建Java源文件
在code文件夹下 右键新建>文本文档
将默认的文件名新建 文本文档.txt 重命名为HelloWorld.java
重命名时系统会提示如果改变文件扩展名,可能导致文件不可以,确实要更改吗?,点击是即可
HelloWorld.java源文件创建成功
- 打开源文件
选中HelloWorld.java,右键选择 在记事本中编辑
Windows11 2023 H2首次使用记事本打开HelloWorld.java源文件时,记事本会提示记事本自动保存进度。下次打开记事本时,你的所有内容都将可用。
- 编辑源文件
在HelloWorld.java源文件中编写HelloWorld
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
在使用记事本编写Java代码时注意以下事项
-
如果觉得代码字体太小,可以按住Ctrl键,然后向上滚动鼠标放大字体
-
源代码需要进行适当的换行、缩进,方便阅读代码
-
源代码遇到了符号,比如说圆括号(()),方括号([]),大括号({})都需要成对编写,然后再往里面编写内容,而且这些符号都是英文的,因为Java是美国人发明的,不支持中文。
源文件(例如HelloWorld.java)编写完成后按Ctrl+s保存
- 编译源文件
首先需要开启Windows终端,因为javac和java只能在Windows终端上使用。
当前文件资源管理器的路径位于D:\code
建议直接在文件资源管理器的地址栏输入cmd后回车打开终端
由于文件资源管理器的地址栏位于D:\code,因此开启终端后会自动切换到D:\code
然后输入javac HelloWorld.java并回车 编译HelloWorld.java源文件
如果没有语法错误编译成功之后会在和源文件相同的目录下生成字节码文件HelloWorld.class
- 解释运行字节码文件
在终端上输入java HelloWorld
后回车解释执行字节码文件HelloWorld.class
如果没有任何运行时错误就会看到Windows终端打印输出Hello World并换行
11.3.2 Windows版第一个Java程序详解
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
- public是一个关键字,表示权限最大的访问权限修饰符,称为公共的,后期在学习面向对象的时候还会学习private,默认的,protected,这里只需要记住如果类名使用public 修饰,那么public修饰的类名必须和源文件名保持一致。
- class是一个关键字,用于定义类,例如class Welcome{} 表示定义一个类,类名是Welcome,{}表示类的开始范围和结束范围,Java是面向对象的编程语言,类是Java程序的基本单元。
- 在一个源文件中可以定义多个class,但是只能有一个类被public修饰。编译器在编译源文件后会生成和源文件中class数量一致的字节码文件,字节码文件名和类名相同
①编写源文件MyWorld.java
源文件MyWorld.java中定义MyWorld、Chinese、American三个类,其中MyWorld是public修饰,因此源文件名只能是MyWorld.java
public class MyWorld{
public static void main(String[] args){
System.out.println("This is my world");
}
}
class Chinese{
}
class American{
}
②编译源文件MyWorld.java
编译MyWorld.java后会生成3个字节码文件,分别是MyWorld.class、Chinese.class和American.class,因为MyWorld.java中定义了3个类。
③运行MyWorld.java
public static void main(String[] args){}
格式是固定的,表示main方法,main方法是Java程序的入口,Java程序是从main方法的第一行开始执行的,该方法被JVM调用,如果你的Java程序想要独立运行,那么必须有固定格式的main方法System.out.println("Hello World");
的作用就是在终端上打印输出字符串Hello World然后换行,如果想输出其他内容只需要替换""中的Hello World即可,;表示语句的结束**,**Java中的每条语句都需要使用;结束,否则编译错误。例如System.out.println();
就是一条打印语句,用于打印输出指定的内容并换行,如果打印输出后不换行可以使用System.out.print();
语句
①编辑源文件PrintData.java
public class PrintData{
public static void main(String[]args){
System.out.println("HelloWorld");
System.out.print("跟光磊学Java");
System.out.print("从小白");
System.out.print("到架构师");
}
}
②编译源文件PrintData.java
③解释运行字节码文件PrintData.class
虽然PrintData程序中System.out.println()
语句打印的内容包含了中文,但是我们使用Java21可以直接编译和运行,不会有中文乱码的问题。
11.4 macOS版第一个Java程序开发与详解
11.4.1 macOS版第一个Java程序开发
在学习任何一门编程语言时编写的第一个程序通常都称为HelloWorld,如果你能够编写并且运行HelloWorld,那么意味着已经迈入编程的大门
本次我们使用比较原始的开发方式:也就是基于文本编辑+macOS终端(iTerm2)+JDK提供的开发工具(javac和java)来开发人生的第一个Java程序,这种方式虽然和使用IDE开发相比效率比较低,但是能够让初学者更加直观地理解Java程序的开发和运行流程。
- 检查Java开发环境
在开发第一个Java程序之前先要检查Java开发环境:即安装、配置JDK
目前本机已经安装四个不同版本的Java,分别是Java8、Java11、Java17、Java21,它们都是官方长期支持版
那么到底是使用哪个版本,是由PATH环境变量决定的
从.zshrc文件中配置得知目前使用的Java版本为Java21
也可以在终端上使用Java提供的javac、java命令,这两个命令提供了-version选项查看版本信息
- javac -version查看Java编译器的版本信息
- java -version查看Java解释器的版本信息
- 新建code文件夹
在/Users/Documents目录下,右键新建文件夹
将文件夹的名称由默认的未命名文件夹改为code,用于存放Java源文件
- 新建源文件
首先在code目录下右键 新建文件>Text
这样就会创建一个文本文件,文件名是未命名.txt
将默认的未命名.txt重命名成HelloWorld.java
访达还会提示 **你确定要将扩展名“.txt”更改为“.java”吗?,**点击使用.java
这样HelloWorld.java源文件就创建成功
- 打开源文件
选中HelloWorld.java,右键 打开方式>文本编辑.app打开
文本编辑打开HelloWorld.java源文件,打开后就可以开始编写Java代码
- 编辑源文件
在HelloWorld.java源文件中编写HelloWorld
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
在使用文本编辑编写Java代码时
- 如果觉得代码字体太小不合适,可以使用Command +和Command - 临时调整字体大小
- 代码需要进行适当的换行、缩进
- 代码中遇到了符号,比如说圆括号(()),方括号([]),大括号({})都需要成对编写,然后再往里面编写内容,而且这些符号都是英文的,因为Java是美国人发明的,不支持中文。
编写完成后按Command+S保存源文件
- 编译源文件
开启macOS终端(内置终端或者iTerm),因为javac和java只能在终端上使用
切换到HelloWorld.java源文件所在的目录(/Users/liuguanglei/Documents/code)
编译源文件HelloWorld.java,如果没有语法错误编译成功之后会生成HelloWorld.class文件
- 解释运行字节码文件
在终端上输入java HelloWorld后回车解释执行HelloWorld.class字节码文件
如果没有任何运行时错误就会看到Windows终端打印输出HelloWorld并换行
11.4.2 macOS版第一个Java程序详解
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
- public是一个关键字,表示权限最大的访问权限修饰符,称为公共的,后期在学习面向对象的时候还会学习private,默认的,protected,这里只需要记住如果类名使用public 修饰,那么public修饰的类名必须和文件名保持一致。
- class是一个关键字,用于定义类,例如class Welcome{} 表示定义一个类,类名是Welcome,{}表示类的开始范围和结束范围,Java是面向对象的编程语言,类是Java程序的基本单元。
- 在一个源文件中可以定义多个class,但是只能有一个类被public修饰。编译器在编译后会生成和源文件中class数量一致的字节码文件,字节码文件名和类名相同。
①编写源文件MyWorld.java
源文件MyWorld.java中定义MyWorld、Chinese、American三个类,其中MyWorld是public修饰,因此源文件名只能是MyWorld.java
public class MyWorld{
public static void main(String[]args){
System.out.println("This is my world");
}
}
class Chinese{
}
class American{
}
②编译源文件MyWorld.java
编译MyWorld.java后会生成3个字节码文件,分别是MyWorld.class、Chinese.class和American.class,因为MyWorld.java中定义了3个类。
③运行MyWorld.java
public static void main(String[] args){}
格式是固定的,表示main方法,main方法是Java程序的入口,Java程序是从main方法的第一行开始执行的,该方法被JVM调用,如果你的Java程序想要独立运行,那么必须有固定格式的main方法System.out.println("Hello World");
的作用就是在终端上打印输出字符串Hello World 然后换行,如果想输出其他内容只需要替换""中的HelloWorld即可,;表示语句的结束,Java中的每条语句(例如System.out.println()就是打印输出语句)都需要使用;结束,否则编译错误。如果打印输出后不想换行可以使用System.out.print();
语句
①编辑源文件PrintData.java
public class PrintData{
public static void main(String[]args){
System.out.println("HelloWorld");
System.out.print("跟光磊学Java");
System.out.print("从小白");
System.out.print("到架构师");
}
}
②编译源文件PrintData.java
③解释运行字节码文件PrintData.class
需要注意的是最后一句打印输出语句末尾添加了%
这是因为如果最后输出不是换行,zsh 就会在最后帮你加一个%,然后强制换行,这样的好处是下一个命令总是从头开始的,不容易混乱。
程序中**System.out.println()**语句打印的内容包含了中文,但是macOS系统无论是文件还是终端默认都是UTF-8编码,不管你使用的是Java8、Java17还是Java21,都不会有中文乱码的问题存在。
11.5 第一个Java程序常见问题
11.5.1 编译时错误和运行时错误
初学者在开发第一个Java程序时可能会遇到各种各样的错误(Bug),这些错误可以分成两类:编译时错误和运行时错误。
因为Java程序是先编译,再解释运行的,因此先出现编译错误,然后再出现解释错误。
即使程序编译通过(语法没有问题),也不一定表示你的程序完全没有问题,因为可能还有运行时错误。
- 编译时错误就是使用javac编译Java源文件遇到的语法错误,除此以外还有找不到源文件的问题
- 运行时错误就是使用java解释执行字节码文件遇到的错误(Bug)和异常
在排查运行时错误的时候如果你修改了源文件的代码,那么一定要重新编译,否则你修改的内容不会生效
在遇到错误后也不要慌,Java会告诉你错在哪里(行号),大家如果解决不了还可以利用网络搜索问题的答案,因为你们遇到的大部分错误在之前别人也遇到过。
- 通过多看实现具备识别Bug的能力
- 通过多思考、多查阅资料实现具备分析Bug的能力
- 通过多尝试、多总结实现具备解决Bug的能力
11.5.2 第一个Java程序程序常见错误和解决方案
11.5.2.1 编译时错误:找不到文件
第一种情况:源文件路径不正确
HelloWorld.java源文件在D:\code目录下
但是启动终端后默认在C:\Users\liuguanglei目录下,如果使用javac编译HelloWorld.java就会出现编译错误:找不到文件
解决办法就是在Windows终端下切换到D:\code目录下再使用javac HelloWorld.java编译源文件
- 切换盘符:输入盘符:(例如D:)然后回车即可
- 切换路径:使用cd 路径然后回车即可,cd只能在盘符内切换
第二种情况:源文件文件名不正确
解决方案就是将源文件名改正确即可
11.5.2.2 编译时错误:找不到符号问题
错误案例
public class HelloWorld{
public static void main(string[]args){
System.out.println("Hello World");
}
}
解决方案:将string改成String然后重新编译和解释运行,因为Java语法规定严格区分大小写,string和String表示完全不同的含义。
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
11.5.2.3 编译时错误:非法字符
错误案例
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
解决方案:将中文的分号;替换成英文的分号;即可,因为Java不识别中文分号
大家需要注意的是Java代码中各种符号必须是英文,例如{},(),[],;都是英文的
建议设置输入法开启 中文输入时使用英文标点,这样就不需要切换到英文输入法再输入符号**。**
以微软拼音为例
依次点击输入法>设置
打开微软拼音输入法设置
选择常规
打开中文输入时使用英文标点
11.5.2.4 编译时错误:GBK的不可映射字符(乱码问题)
当前使用的Java版本是Java17
如果你的Java版本是Java17及其以下的版本,例如Java17、Java11或者Java8,编译以下程序
public class HelloWorld{
public static void main(String[]args){
System.out.println("跟光磊学Java从小白到架构师");
}
}
原因就是编码和解码的不是同一个编码,这两个编码不一致导致的乱码
- Java源文件的默认编码是UTF-8
- Windows终端或者称为命令提示符的编码是GB2312
在Windows终端中可以使用chcp查看终端编码,如果输出结果是936则表示GB2312编码,GB2312是一种双字节编码,用于表示简体中文字符。
解决方案1:将文件另存为的时候设置编码为ANSI
设置文件编码为ANSI,点击保存
确认另存为HelloWorld时会提示 **HelloWorld.java已经存在。要替换它吗?**点击是即可
此时文件编码从UTF-8改成ANSI,ANSI在中文环境下就是中文编码,等价GB2312
再编译和解释运行HelloWorld
解决方案2:不修改源文件编码,即源文件HelloWorld.java依然使用UTF-8编码
但是在编译时指定文件编码:javac -encoding UTF-8 HelloWorld.java
解决方案3:使用Java21
Java18以后默认javac编译源文件时使用UTF-8编码
11.5.2.5 运行时错误:找不到或者无法加载主类
public class HelloWorld{
public static void main(String[]args){
System.out.println("跟光磊学Java从小白到架构师");
}
}
主类表示有main方法的类,找不到或者无法加载主类的原因就是当前路径下没有指定的字节码文件或者类中没有main方法
解决方案:先使用javac HelloWorld.java编译生成字节码文件,再使用java HelloWorld解释运行程序
需要注意区分的是macOS系统的终端(例如iTerm)默认使用的是UTF-8编码,因此即使使用的Java版本是Java17,如果编译和运行HelloWorld程序也不会出现中文乱码问题。
11.5.2.6 运行时错误:找不到main方法的问题
错误案例
public class HelloWorld{
public static void mian(String[]args){
System.out.println("跟光磊学Java从小白到架构师");
}
}
解决方案:将mian改成main即可
public class HelloWorld{
public static void main(String[]args){
System.out.println("跟光磊学Java从小白到架构师");
}
}
Java程序想要独立运行必须包含如下固定格式的main方法
public static void main(String[]args){
}
12 Java新特性
12.1 Java11新特性-运行单文件源码程序
在Java11之前Java源文件必须先经过javac编译,然后在使用java运行
Java11提供新特性-运行单文件源码程序
当编写一个源文件(例如HelloWorld.java)后无需再使用javac编译源文件生成字节码文件,而可以直接使用java运行单文件源码程序(例如HelloWorld.java)
12.2 Java21新特性-未命名类和实例main方法
Java21新增预览版的特性:未命名类和实例main方法
此特性的好处就是可以让初学者在不需要了解程序结构和修饰符的前提下,更快更容易地写出第一个HelloWorld程序
Java21之前的HelloWorld
public class HelloWorld{
public static void main(String[]args){
System.out.println("跟光磊学Java从小白到架构师");
}
}
Java21之后的HelloWorld
void main(){
System.out.println("跟光磊学Java从小白到架构师");
}
比之下Java21之后的HelloWorld更加简洁,这样可以减少错误的出现
- 编译时需要使用
javac **--enable-preview --source 21** 源文件名.java
,例如javac --enable-preview --source 21 HelloWorld.java
- 解释运行时使用
java **--enable-preview** 字节码文件名
,例如java --enable-preview HelloWorld
在使用Java21新特性未命名类和实例main方法编写完源文件后,也可以直接使用java --enable-preview --souce 21 源文件名.java
**,**例如java --enable-preview --souce 21 HelloWorld.java
来编译运行HelloWorld。
13 Java跨平台原理
13.1 Java跨平台原理介绍
在搭建Windows版和macOS版Java开发环境时都需要根据自己所使用操作系统的版本来选择安装、配置对应版本的JDK
而JDK包含JRE和开发工具,JRE包含JVM和核心类库,Oracle公司需要根据不同的操作系统开发不同版本的JDK
Java跨平台指的是在Windows系统上开发的Java程序编译之后的字节码文件可以在任意安装了JDK的其他操作系统上运行。
Java跨平台的原理就是Java程序不是直接在操作系统上运行的,而是在JVM(Java Virtual Machine)上运行。JVM屏蔽底层操作系统差异性,但是JVM本身不是跨平台。
13.2 Java跨平台原理实战
HelloWorld程序演示Java跨平台
- 检查Windows和macOS的Java环境
检查Windows Java环境
检查macOS Java环境
- 在Windows上编辑源文件HelloWorld.java
public class HelloWorld{
public static void main(String[]args){
System.out.println("跟光磊学Java从小白到架构师");
}
}
- 在Windows终端上使用javac编译HelloWorld.java源文件,生成HelloWorld.class字节码文件
- 在macOS iTerm终端上使用java解释运行Windows系统使用javac编译生成的HelloWorld字节码文件