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 | |
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 | 非长期支持版本 |
Java15 | 2020/09 | 非长期支持版本 |
Java16 | 2021/03 | 非长期支持版本 |
Java17 | 2021/09 | 目前最新长期支持版本,版本号也被称为21.9 |
Java18 | 2022/03 | 非长期支持版本 |
Java19 | 2022/09 | 非长期支持版本 |
Java20 | 2023/03 | 非长期支持版本 |
Java21 | 2023/09 | 长期支持版本 |
每个新版本JDK发布都会有些新特性(新功能)
注意事项
Java5和JDK1.5指的是同一个版本,Java8和JDK1.8指的是同一个版本
Java7以后Java由Oracle发布
Java8仍然是目前主流互联网公司使用的版本
Java9以后每半年发布一个版本,每2-3年发布一个长期支持版本(LTS),例如Java8,Java11,Java17,Java21是长期支持版本。
自从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、JavaME三者之间的关系
Java主要是擅长企业级应用开发(大型分布式系统的后台开发)、大数据平台开发、Android应用开发三个开发方向
企业级应用开发 :主要指复杂的大企业软件系统、各种类型网站后台系统。 Java的安全机制以及它的跨平台优势、强大的生态体系,在大型分布式系统领域开发中有广泛应用。包括电商、物流、金融、电信、社交、外卖、出行等。
大数据平台开发 :各类大数据平台开发框架有 Hadoop,Spark、Flink 等,就这类技术生态圈来讲,还有各种中间件如 Flume,Kakfa,Sqoop等,这些框架以及工具大多数是用 Java 编写而成,但提供诸如 Java,Scala,Python,R等各种语言API。
Android应用开发 :Android应用程序使用Java语言编写,Android开发水平的高低很大程度上取决于 Java语言是否扎实 。
Java语言是这三个开发方向的基石语言,无论选择哪个开发方向,首先必须要学习Java语言,然后根据市场的需求再结合自己的兴趣选择对应的开发方向。
根据现在的市场就业形势,一般大部分人都会选择企业级应用开发(大型分布式系统的后台开发),然后积累3-5年工作经验以后有兴趣可以转向大数据平台开发。
基本的学习路线:JavaSE->JavaEE->大数据
由于Java语言是开源的,也得到了很多大公司的支持(Oracle,Amazon,Google,Alibaba、HUAWEI、Tencent)的支持,逐渐发展成了具有简单易学、开源、跨平台(可移植)、体系结构中立、安全性、高性能、健壮型、支持面向对象、多线程、分布式、动态性等诸多特点的开发平台和运行平台。
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、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项目对外提供服务。
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体系结构
首先需要了解下Oracle Java SE Support Roadmap
LTS表示Oracle官方长期支持的版本,例如Java8,Java11,Java17,Java21,其中Java8官方支持到2030年12月,Java17官方支持到2029年9月,Oracle官方每2-3年发布一个LTS版本
non-LTS表示非Oracle官方长期支持的版本(测试版),例如Java9,Java10,Java12,Java13,Java14,Java15,Java16,Java18,Java19,Java20等等都是non-LTS版本,Oracle官方每半年(在每年的3月份和9月份)发布一个non-LTS版本
选择JDK版本的时候分两种情况
学习Java的时候可以选择高版本的JDK,但是必须是LTS版本,例如Java17,Java21
去公司开发Java项目的时候,公司已有的项目用什么JDK版本,那么你就优先使用什么JDK版本,公司从0开始开发项目,那么优先选择稳定而且是官方长期支持的版本,例如Java8或者Java17,目前国内大部分的互联网公司现有的Java项目依然使用Java8,未来(2-3年以后)会逐步升级到Java17,一些开源框架依赖的JDK也从Java8已经升级到Java17,例如Spring Framework,Spring Boot等等。
Oracle Java archive归档了所有Java版本
在2019年以后Java8后续更新的版本就开始收费,但是主要针对的是企业用户,对于个人学习没有任何影响。
Java SE 8 (8u202 and earlier)在生产环境是可以免费使用
Java SE 8 (8u211 and later)在生产环境是需要付费使用
由于Java虚拟机规范是开放的,任何企业或者是个人都可以实现它
我们常用的Oracle JDK只是Oracle公司的一种 JDK 具体实现,其他企业和个人可以根据规范自己开发JDK。
常见的JDK有如下几种
Oracle JDK
Open JDK 免费开源,企业可以直接使用
国外的IBM、Amazon、SAP、Eclipse、Azul以及国内的阿里、腾讯、华为都有自己的JDK
即使Oracle公司的Java8在生产环境中收费,我们也可以选择其他公司免费版本的Java8,例如Amazon Corretto、Azul Zulu等等。
Java的下载地址是https://www.oracle.com/java/technologies/downloads/
目前(2024/01/02)Oracle官方提供的最新Java版本(JDK版本)是Java21 和Java17,最新的LTS版本是Java21
本次我们下载的是Java8,所以往下滚动鼠标到Java8的下载
目前Java8支持四个操作系统
Linux
macOS
Solaris
Windows
大家在下载Java8的时候需要根据自己所使用操作系统的版本选择对应版本的Java8
Q:如何知道使用Windows版本
A:在设置(Windows+i)>系统>系统信息查看设备规格和Windows规格
由于本机使用的操作系统是Windows11 2023 H2 ,因此选择Windows x64 Installer 的jdk-8u391-windows-x64.exe
86 Installer 表示32位Java8安装程序
x64 Installer 表示64位Java8安装程序
选择32位还是64位是根据系统类型来决定的,强制要求开发者全部使用64位系统,因为32位系统最多只能使用4G内存,现在做软件开发4G内存肯定是不够用的。
如果没有Oracle账户,大家可以在注册页面填写相应的信息注册Oracle账户
账户创建成功以后,在登录页面填写账户信息登录Oracle账户
登录成功之后浏览器会自动下载Java8
使用快捷键 Ctrl+J 可以打开下载内容,查看下载的速度以及所需的时间
当Java8下载完成后,点击在文件夹中显示
默认在下载目录(C:\Users\liuguanglei\Downloads)下会看到Java8的安装包jdk-8u391-windows-x64.exe
在弹出的**用户账户控制,你要允许此应用对你的设备进行更改吗?**选择是即可
安装组件默认情况下包含了开发工具、源代码和公共JRE
安装路径默认情况下是 C:\Program Files\Java\jdk-1.8
由于JDK中包含了JRE,因此无需再安装公共JRE
因此选择公共JRE,设置成此功能将不可用
只需要安装开发工具和源代码即可
开始安装
稍等片刻即可安装完成
安装完成后可以点击 后续步骤 和 关闭
Windows版Java8安装目录是C:\Program Files\Java\jdk-1.8
由于JDK包含了JRE,因此Java8目录中有个jre目录
作为Java初学者来说,目前只需要关注bin目录和src.zip压缩文件
该文件可以使用WinRAR解压缩,例如解压缩到src
在弹出的**用户账户控制,你要允许此应用对你的设备进行更改吗?**选择是即可
src目录下存放的就是Java源代码
例如String.java
String.java源文件位于 java\lang 目录下
Visual Studio Code是一个跨平台的文本编辑器,需要自己下载、安装
使用Visual Studio Code文本编辑器打开String.java
JAVA_HOME表示Java的安装路径,例如C:\Program Files\Java\jdk-1.8
后期我们会使用到Java开发的一些工具,例如Tomcat、Maven、JMeter等等,这些工具都会依赖JAVA_HOME环境变量。如果你不配置就无法正常使用,而且这些工具会提示你配置JAVA_HOME环境变量。
例如在终端位于Maven的bin目录下执行 mvn --version命令查看Maven版本信息时会提示需要配置JAVA_HOME环境变量
而只有安装Java并配置JAVA_HOME环境变量以后,重新开启终端后在终端位于Maven的bin目录下执行 mvn --version命令会输出Maven版本信息以及依赖的Java信息
依次打开设置(Windows+i)>系统>系统信息
高级系统设置
然后会弹出系统属性面板
环境变量分为用户变量和系统变量,二者的区别是作用范围不同
用户变量只针对当前用户有效,系统变量针对所有用户都有效
Windows电脑通常只有一个人使用,不太可能有多个用户,因此建议使用系统变量
点击系统变量的新建(W),然后输入变量名和变量值
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk-1.8
验证的方法就是启动一个终端,然后在终端输入echo %JAVA_HOME%,如果能够输出Java的安装路径表示配置成功
Q:如何启动终端
A:按Windows+R打开运行窗口
然后输入cmd后回车
就可以打开终端
输入 echo %JAVA_HOME% 验证JAVA_HOME环境变量是否配置成功,如果能够输出Java8的安装目录C:\Program Files\Java\jdk-1.8则表示配置成功
Path环境变量的变量名是Path,变量值就是一系列路径,例如%SystemRoot%,%SystemRoot%\system32等等。
Q:如何查看Path环境变量
A:依次点击系统属性面板>环境变量>系统变量Path>编辑>编辑环境变量
其中%SystemRoot%表示Windows系统根路径 C:\Windows
可以在终端上输入echo %SystemRoot%命令查看
Path环境变量的作用就是当我们在终端上输入命令回车后,系统会从当前路径和Path环境变量指定的路径查找命令对应的可执行程序,然后执行程序。
当我们在终端上输入notepad命令回车后
系统会打开notepad对应的记事本程序
notepad命令对应的记事本程序路径是C:\Windows\notepad.exe
但是如果我们输入一个不存在的命令(例如notepadxxx),那么系统无法运行该命令对应的可执行程序,然后会提示 不是内部或外部命令,也不是可运行的程序或批处理文件。
Q:如何实现在Windows终端的任意路径下输入QQ就可以启动QQ
A:将软件的安装路径配置到环境变量中,就可以在Windows终端的任意路径下打开指定的软件
说明:测试QQ版本号是9.9.6-19689(64位)
在属性面板中点击打开文件所在的位置(F)
此时打开的就是QQ安装目录(C:\Program Files\Tencent\QQNT)
依次打开设置(Windows+i)>系统>系统信息
高级系统设置
然后会弹出系统属性面板
点击系统属性面板的环境变量打开环境变量面板
配置QQ的Path环境变量
首先点击系统变量的Path,然后再点击编辑
然后点击新建,将QQ 的安装目录(C:\Program Files\Tencent\QQNT)添加到Path环境变量中
点击三次确定关闭系统属性面板,完成QQ的Path环境变量配置
验证QQ的Path环境变量是否配置成功
首先windows+r打开运行窗口
然后在运行窗口输入cmd回车后
重新开启一个终端
然后在终端的任意路径输入QQ后回车
看QQ是否能够启动成功,如果能够启动则表示QQ的Path环境变量配置成功
假设不配置Java8的Path环境变量,在终端上使用javac和java的时候,系统会提示 不是内部或外部命令,也不是可运行的程序或批处理文件。
因为Java8提供的开发工具(javac,java)需要在终端上使用,如果你双击运行javac和java,它们会在终端运行后立刻闪退。
为了在终端的任意路径下使用javac和java,因此我们需要将Java8安装目录的bin目录添加到Path环境变量中
javac 用于编译java源文件(.java结尾的文件),编译成功之后会生成字节码文件(.class结尾的文件)
java 用于解释执行字节码文件,运行Java程序
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
点击系统属性面板的环境变量打开环境变量面板
配置Java8的PATH环境变量
首先点击系统变量的Path环境变量,再点击编辑
点击新建,将Java8安装目录的bin目录(C:\Program Files\Java\jdk-1.8\bin)添加到Path环境变量中,
并且置顶
验证Java8的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,如果终端能够输出java编译器版本信息和java解释器版本信息则表示Java8的Path环境变量配置成功
Q:为什么Java8要使用JAVA_HOME配置Path环境变量
A:切换JDK版本时只需要修改JAVA_HOME环境变量的值即可
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
首先点击系统变量的Path,然后点击编辑
然后将Java8的Path环境变量C:\Program Files\Java\jdk-1.8\bin
改成%JAVA_HOME%\bin,%JAVA_HOME%就是C:\Program Files\Java\jdk-1.8
验证Java8的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,如果终端能够输出java编译器版本信息和java解释器版本信息则表示Java8的Path环境变量配置成功
Q:什么时候需要卸载Java8
A:如果不再使用(例如公司项目全部使用Java17开发)Java8时就可以将其卸载
Windows版Java8的卸载需要删除Java8相关环境变量(Path环境变量、JAVA_HOME环境变量)以及Java8程序
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
首先选择系统变量的Path,然后点击编辑
然后选择Java8的Path环境变量%JAVA_HOME%\bin,点击删除即可
重新开启一个新的终端,在终端的任意路径下输入javac -version和java -version,如果系统提示javac和java不是内部或外部命令,也不是可运行的程序或批处理文件则表示Java8的Path环境变量删除成功
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
选择系统变量的JAVA_HOME,点击删除
重新开启一个终端,然后在终端上输入echo %JAVA_HOME% 回车后,如果不能输出Java8的安装路径,而是输出%JAVA_HOME%,那么表示Java8 JAVA_HOME环境变量删除成功
右键点击开始菜单,然后左键选择安装的应用
此时可以查看安装的应用
免安装版本的软件不会在安装的应用列表中显示
确认卸载
然后在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗? 选择是即可
接下来就会开始卸载,此过程大概几秒钟
卸载成功后在安装的应用中找不到Java
Java的下载地址是 https://www.oracle.com/java/technologies/downloads/
目前(2024/01/02)Oracle官方提供的最新Java版本(JDK版本)是Java21 和Java17,最新的LTS版本是Java21
根据 Oracle 免费条款和条件 (NFTC),JDK 17 二进制文件可以在生产中免费使用,并且可以免费重新分发。
JDK 17 将根据 NFTC 接收更新,直至 2024 年 9 月。后续的 JDK 17 更新将根据 Java SE OTN 许可证 (OTN) 进行许可,并且超出 OTN 许可证有限免费授予的生产使用将需要付费。
目前Java17支持三个系统
Linux
macOS
Windows
大家在下载Java17的时候需要根据自己所使用操作系统的版本选择对应版本的Java17
Q:如何知道使用Windows版本
A:在设置(Windows+i)>系统>系统信息查看设备规格和Windows规格
由于本机使用的操作系统是Windows11 2023 H2 ,因此选择Windows x64 Installer 的jdk-17_windows-x64_bin.exe
当点击 https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe 下载连接后浏览器会自动开始下载Windows版 JDK17 x64 Installer
使用快捷键 Ctrl+J 可以打开下载内容,查看下载的速度以及所需的时间
和Java8相比下载时不需要同意许可协议,也不需要注册和登录Oracle账号,因此下载Java17比下载Java8更加方便。
当Java17下载完成后,点击在文件夹中显示
默认在下载目录(C:\Users\liuguanglei\Downloads)下会看到Java17的安装包jdk-17_windows-x64_bin.exe
在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗?选择是即可启动安装程序
默认安装路径是C:\Program Files\Java\jdk-17
如果想要更改到其他目录,点击更改即可,但是注意目录不要包含中文字符和中文空格
进行安装中,安装过程需要几秒钟
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目录
该文件可以使用WinRAR解压缩,例如解压缩到src
在弹出的**用户账户控制,你要允许此应用对你的设备进行更改吗?**选择是即可
src目录下存放的就是Java源代码
例如String.java
该文件位于 java.base\java\lang 目录下
Visual Studio Code是一个跨平台的文本编辑器,需要自己下载、安装
使用Visual Studio Code文本编辑器打开String.java
JAVA_HOME表示Java的安装路径,例如C:\Program Files\Java\jdk-17
后期我们会使用到Java开发的一些工具,例如Tomcat、Maven、JMeter等等,这些工具都会依赖JAVA_HOME环境变量。如果你不配置就无法正常使用,而且这些工具会提示你配置JAVA_HOME环境变量。
例如在终端位于Tomcat的bin目录下(D:\soft\java\apache-tomcat-10.1.17\bin)执行 startup.bat脚本启动Tomcat时会提示需要配置JAVA_HOME环境变量
而只有在安装Java并且配置JAVA_HOME环境变量以后,在终端位于Tomcat的bin目录下(D:\soft\java\apache-tomcat-10.1.17\bin)执行 startup.bat脚本才能正常启动Tomcat
此时终端的路径就是Tomcat的bin目录(D:\soft\java\apache-tomcat-10.1.17\bin)
启动成功之后在浏览器地址栏输入127.0.0.1:8080可以访问Tomcat首页
不过Tomcat启动窗口会有中文乱码问题
因此启动之前需要将位于Tomcat配置文件目录(D:\soft\java\apache-tomcat-10.1.17\conf)的Tomcat日志配置文件logging.properties
关于控制台编码由默认的UTF-8改成GBK,就可以解决Tomcat启动窗口中文乱码问题
java.util.logging.ConsoleHandler.encoding = GBK
编码修改成 GBK 以后再次重启 Tomcat,就会发现Tomcat启动窗口中文没有乱码
依次打开设置(Windows+i)>系统>系统信息
高级系统设置
然后会弹出系统属性面板
环境变量分为用户变量和系统变量,二者的区别是作用范围不同
用户变量只针对当前用户有效,系统变量针对所有用户都有效
Windows电脑通常只有一个人使用,不太可能有多个用户,因此建议使用系统变量
点击系统变量的新建(W),然后输入变量名和变量值
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk-17
验证的方法就是启动一个终端,然后在终端输入echo %JAVA_HOME%,如果能够输出Java的安装路径表示配置成功
Q:如何启动终端
A:在文件资源管理器(Windows+E)的地址栏输入cmd回车后
就可以打开终端
输入 echo %JAVA_HOME% 验证JAVA_HOME环境变量是否配置成功,如果能够输出Java17的安装目录C:\Program Files\Java\jdk-17则表示配置成功
在安装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提供的其他工具,例如jconsole、jps、jstack等等,因此建议手动配置Java21的Path环境变量。
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
首先点击系统变量的Path环境变量,再点击编辑
点击新建,将Java17安装目录的bin目录(C:\Program Files\Java\jdk-17\bin)添加到Path环境变量中
并且置顶
然后将Java17自动配置的Path环境变量删除
验证Java17的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,如果终端能够输出java编译器版本信息和java解释器版本信息则表示Java17的Path环境变量配置成功
Q:为什么Java17要使用JAVA_HOME配置Path环境变量
A:切换JDK版本时只需要修改JAVA_HOME环境变量的值即可
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
首先点击系统变量的Path环境变量,再点击编辑
将Java17的Path环境变量由C:\Program Files\Java\jdk-17\bin
改成%JAVA_HOME%\bin,%JAVA_HOME%就表示C:\Program Files\Java\jdk-17
验证Java17的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,如果终端能够输出java编译器版本信息和java解释器版本信息则表示Java17的Path环境变量配置成功
由于开发项目时使用Java8,但是想要学习高版本Java的新特性,因此安装了Java17,此时机器上同时存在两个不同版本的Java
那么如何在这两个版本之间来回切换?
首先需要知道当前使用的Java版本
在终端的任意路径通过javac -version和java -version得知目前使用的是Java17
Q:为什么Java版本是Java17?
A:因为JAVA_HOME环境变量的值是Java17的安装路径,而JDK的Path环境变量引用了JAVA_HOME环境变量
那么想要实现Java8和Java17相互切换,只需要修改JAVA_HOME环境变量的值即可
想要从Java17切换到Java8,只需要将JAVA_HOME环境变量的变量值修改成Java8的安装路径
然后重新开启一个终端,在终端的任意路径上输入javac -version和java -version,如果终端输出的Java编译器和解释器版本信息为Java8则表示Java版本成功从Java17切换到Java8
从Java8再次切换到Java17,只需要将JAVA_HOME环境变量的变量值改成Java17的安装路径
然后重新开启一个终端,在终端的任意路径上输入javac -version和java -version,如果终端输出的Java编译器和解释器版本信息为Java17则表示Java版本成功从Java8切换到Java17
Q:什么时候需要卸载Java17
A:如果不再使用(例如公司项目全部使用Java21开发)Java17时就可以将其卸载
Windows版Java17的卸载需要删除Java17相关环境变量(Path环境变量、JAVA_HOME环境变量)以及Java17程序
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
首先选择系统变量的Path,然后点击编辑
然后选择Java17的Path环境变量%JAVA_HOME%\bin,点击删除即可
重新开启一个新的终端,在终端的任意路径下输入javac -version和java -version,如果系统提示javac和java不是内部或外部命令,也不是可运行的程序或批处理文件则表示Java17的Path 环境变量删除成功
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
选择系统变量的JAVA_HOME,点击删除
重新开启一个终端,然后在终端上输入echo %JAVA_HOME% 回车后,如果不能输出Java17的安装路径而是输出%JAVA_HOME%,那么表示Java17 JAVA_HOME环境变量删除成功
右键点击开始菜单,然后左键选择安装的应用
此时可以查看安装的应用
免安装版本的软件不会在安装的应用列表显示
确认卸载
然后在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗? 选择是即可
接下来就会开始卸载,此过程大概几秒钟
卸载成功后在安装的应用中找不到Java17
Java的下载地址是 https://www.oracle.com/java/technologies/downloads/
目前(2024/01/02)Oracle官方提供的最新Java版本(JDK版本)是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
Q:如何知道使用Windows版本
A:在设置(Windows+i)>系统>系统信息查看设备规格和Windows规格
由于本机使用的操作系统是Windows11 2023 H2 ,因此选择Windows x64 Installer 的jdk-21_windows-x64_bin.exe
当点击 https://download.oracle.com/java/21/latest/jdk-21_windows-x64_bin.exe下载连接后浏览器会自动开始下载Windows版 JDK21 x64 Installer
使用快捷键 Ctrl+J 可以打开下载内容,查看下载的速度以及所需的时间
和Java8相比下载时不需要同意许可协议,也不需要注册和登录Oracle账号,因此下载Java21比下载Java8更加方便。
当Java21下载完成后,点击在文件夹中显示
默认在下载目录(C:\Users\liuguanglei\Downloads)下会看到Java21的安装包jdk-21_windows-x64_bin.exe
在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗?选择是即可启动安装程序
默认安装路径是C:\Program Files\Java\jdk-21
如果想要更改到其他目录,点击更改即可,但是注意目录不要包含中文字符和中文空格
进行安装中,安装过程需要几秒钟
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目录
该文件可以使用WinRAR解压缩,例如解压缩到src
在弹出的**用户账户控制,你要允许此应用对你的设备进行更改吗?**选择是即可
src目录下存放的就是Java源代码
例如String.java
该文件位于 java.base\java\lang 目录下
Visual Studio Code是一个跨平台的文本编辑器,需要自己下载、安装
使用Visual Studio Code文本编辑器打开String.java
JAVA_HOME表示Java的安装路径,例如C:\Program Files\Java\jdk-21
后期我们会使用到Java开发的一些工具,例如Tomcat、Maven、JMeter等等,这些工具都会依赖JAVA_HOME环境变量。如果你不配置就无法正常使用,而且这些工具会提示你配置JAVA_HOME环境变量。
例如在终端**位于Tomcat的bin目录下****(D:\soft\java\apache-tomcat-10.1.17\bin)**执行 startup.bat脚本启动Tomcat时会提示需要配置JAVA_HOME环境变量
而只有在安装Java并且配置JAVA_HOME环境变量以后,在终端**位于Tomcat的bin目录下****(D:\soft\java\apache-tomcat-10.1.17\bin)**执行 startup.bat脚本才能正常启动Tomcat
此时终端的路径就是Tomcat的bin目录**(D:\soft\java\apache-tomcat-10.1.17\bin)**
启动成功之后在浏览器地址栏输入127.0.0.1:8080可以访问Tomcat首页
不过Tomcat启动窗口会有中文乱码问题
因此启动之前需要将位于Tomcat配置文件目录(D:\soft\java\apache-tomcat-10.1.17\conf)的Tomcat日志配置文件logging.properties
关于控制台编码由默认的UTF-8改成GBK,就可以解决Tomcat启动窗口中文乱码问题
java.util.logging.ConsoleHandler.encoding = GBK
编码修改成 GBK 以后再次重启 Tomcat,就会发现Tomcat启动窗口中文没有乱码
依次打开设置(Windows+i)>系统>系统信息
高级系统设置
然后会弹出系统属性面板
环境变量分为用户变量和系统变量,二者的区别是作用范围不同
用户变量只针对当前用户有效,系统变量针对所有用户都有效
Windows电脑通常只有一个人使用,不太可能有多个用户,因此建议使用系统变量
点击系统变量的新建(W),然后输入变量名和变量值
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk-21
验证的方法就是启动一个终端,然后在终端输入echo %JAVA_HOME%,如果能够输出Java的安装路径表示配置成功
Q:如何启动终端
A:在文件资源管理器(Windows+E)的地址栏输入cmd回车后
就可以打开终端
输入 echo %JAVA_HOME% 验证JAVA_HOME环境变量是否配置成功,如果能够输出Java21的安装目录C:\Program Files\Java\jdk-21则表示配置成功
在安装Java21以后,Java21会自动配置Path环境变量
依次点击系统属性>环境变量>系统变量Path>编辑后可以查看到Java21自动配置的Path环境变量
不过配置的路径是C:\Program Files\Common Files\Oracle\Java\javapath,该路径下只有javac、java、javaw和jshell四个工具
这样也就意味着可以在终端的任意路径下使用javac和java,例如在终端的任意路径下使用javac和java提供的-version选项查看Java编译器和解释器的版本信息
但是无法在终端的任意路径下使用Java提供的其他工具,例如jconsole、jps、jstack等等,因此建议手动配置Java21的Path环境变量。
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
首先点击系统变量的Path环境变量,再点击编辑
点击新建,将Java21安装目录的bin目录(C:\Program Files\Java\jdk-21\bin)添加到Path环境变量中
并且置顶
然后将Java21自动配置的Path环境变量删除
验证Java21的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,如果终端能够输出java编译器版本信息和java解释器版本信息则表示Java21的Path环境变量配置成功
Q:为什么Java21要使用JAVA_HOME配置Path环境变量
A:切换JDK版本时只需要修改JAVA_HOME环境变量的值即可
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
首先点击系统变量的Path环境变量,再点击编辑
将Java21的Path环境变量由C:\Program Files\Java\jdk-21\bin
改成%JAVA_HOME%\bin,%JAVA_HOME%就是C:\Program Files\Java\jdk-21
验证Java21的Path环境变量是否配置成功的方法就是就是重新开启一个终端,然后在终端的任意路径分别输入javac -version和java -version并回车,如果终端能够输出java编译器版本信息和java解释器版本信息则表示Java21的Path环境变量配置成功
由于开发项目时使用Java17,但是想要学习高版本Java的新特性,因此安装了Java21,此时机器上同时存在两个不同版本的Java
那么如何在这两个版本中间切换?
首先需要知道当前使用的Java版本
在终端的任意路径通过javac -version和java -version得知目前使用的是Java21
Q:为什么Java版本是Java21?
A:因为JAVA_HOME环境变量的值是Java21的安装路径,而JDK的Path环境变量引用了JAVA_HOME环境变量
那么想要实现Java17和Java21相互切换,只需要修改JAVA_HOME环境变量值即可
想要从Java21切换到Java17,只需要将JAVA_HOME环境变量的变量值修改成Java17的安装路径
然后重新开启一个终端,在终端的任意路径上输入javac -version和java -version,如果终端输出的Java编译器和解释器版本信息为Java17则表示Java版本成功从Java21切换到Java17
从Java17再次切换到Java21,只需要将JAVA_HOME环境变量的变量值改成Java21的安装路径
然后重新开启一个终端,在终端的任意路径上输入javac -version和java -version,如果终端输出的Java编译器和解释器版本信息为Java21则表示Java版本成功从Java17切换到Java21
Q:什么时候需要卸载Java21
A:如果不再使用(例如公司项目全部使用Java25开发)Java21时就可以将其卸载
Windows版Java21的卸载需要删除Java21相关环境变量(Path环境变量、JAVA_HOME环境变量)以及Java21程序
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
首先选择系统变量的Path,然后点击编辑
然后选择Java21的Path环境变量%JAVA_HOME%\bin,点击删除即可
重新开启一个新的终端,在终端的任意路径下输入javac -version和java -version,如果系统提示javac和java不是内部或外部命令,也不是可运行的程序或批处理文件则表示Java21的Path 环境变量删除成功
在任务栏的搜索框搜索编辑系统环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
选择系统变量的JAVA_HOME,点击删除
重新开启一个终端,然后在终端上输入echo %JAVA_HOME% 回车后,如果不能输出Java21的安装路径而是输出%JAVA_HOME%,那么表示Java21 JAVA_HOME环境变量删除成功
右键点击开始菜单,然后左键选择安装的应用
此时可以查看安装的应用
免安装版本的软件不会在安装的应用列表显示
确认卸载
然后在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗? 选择是即可
接下来就会开始卸载,此过程大概几秒钟
卸载成功后在安装的应用中找不到Java
编写**:使用Java开发工具**编写源文件,源文件以.java结尾,用于存储Java代码
编译**:使用javac**把源文件编译生成字节码文件,字节码文件以.class结尾,字节码文件名和类名相同,字节码文件的数量和源文件中class的数量相同,编译的格式是javac 源文件名.java,例如javac HelloWorld.java
运行:使用java解释运行编译生成后的字节码文件,运行的格式是java 字节码文件名(不需要.class后缀),例如java HelloWorld
Q:如何看待Java是一门半编译半解释型的语言?
A:半编译半解释指的是JVM在解释执行既有解释器解释执行,又有JIT编译器编译执行
工欲善其事,必先利其器
虽然JDK提供了开发Java程序时所用到的一些工具,例如javac,java,jdb,jconsole等等
但是JDK并没有提供编写Java代码的开发工具,因此想要在编写Java程序之前,还需要了解Java开发工具, 我这里把Java开发工具分成两类,分别是文本编辑器和IDE(Integrated Development Environment)
常用的文本编辑器有记事本、Visual Studio Code、Sublime Text
Visual Studio Code和Sublime Text都是高级的文本编辑器,而且是跨平台的(Windows,macOS,Linux),建议初学Java的朋友可以使用它们来开发Java程序,因为相比IDE而言更加轻量级,对初学者更加容易上手**。**
常用的Java IDE(Integrated Development Environment) 有IntelliJ IDEA和Eclipse
IDEA和Eclipse都是IDE,IDE集成项目开发中常用的功能,包括编辑器、编译工具、反编译工具、测试工具、性能分析工具、部署工具等等,因此可以大大提高开发效率。
目前大部分互联网公司基本普遍都会使用IntelliJ IDEA开发Java项目,因此我们后期会全程使用IntelliJ IDEA。
在学习任何一门编程语言时编写的第一个程序通常都称为HelloWorld
如果你能够编写并且运行HelloWorld,那么意味着已经迈入编程的大门
本次我们使用比较原始的开发方式:也就是基于记事本+Windows终端(命令提示符)+JDK提供的开发工具(javac和java)来开发人生第一个Java程序,这种方式虽然和使用IDE开发相比效率比较低,但是能够让初学者更加直观地理解Java程序的开发和运行流程。
在开发第一个Java程序之前先要检查Java开发环境:即安装、配置JDK
目前本机已经安装四个不同版本的Java,分别是Java8、Java11、Java17、Java21,它们都是官方长期支持版
那么到底是使用哪个版本,是由PATH环境变量决定的
从系统属性>环境变量>系统变量>Path环境变量得知目前使用的Java版本为Java21
也可以在终端上使用Java提供的javac、java命令,这两个命令提供了-version选项查看版本信息
javac -version查看Java编译器的版本信息
java -version查看Java解释器的版本信息
在D盘目录下,鼠标右键新建>文件夹
将文件夹的名称由默认的新建文件夹重命名为code,用于存放Java源文件
默认情况下Windows是隐藏已知文件扩展名
在新建源文件之前依次点击查看>显示>文件扩展名,勾选文件扩展名,这样才能显示文件扩展名
在code文件夹下 右键新建>文本文档
将默认的文件名新建 文本文档.txt 重命名为HelloWorld.java
重命名时系统会提示如果改变文件扩展名,可能导致文件不可以,确实要更改吗?,点击是即可
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并回车 编译HellWorld.java源文件
如果没有语法错误编译成功之后会在和源文件相同的目录下生成HelloWorld.class文件
在终端上输入java HelloWorld后回车解释执行HelloWorld.class字节码文件
如果没有任何运行时错误就会看到Windows终端打印输出Hello World并换行
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数量一致的字节码文件,字节码文件名和类名相同
public class MyWorld{
public static void main(String[] args){
System.out.println("This is my world");
}
}
class Chinese{
}
class American{
}
编译和运行MyWorld.java程序后会生成3个字节码文件,分别是MyWorld.class、Chinese.class和American.class,因为MyWorld.java中定义了3个类。
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();语句
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程序中System.out.println()语句打印的内容包含了中文,但是我们使用Java21可以直接编译和运行,不会有中文乱码的问题。
初学者在开发第一个Java程序时可能会遇到各种各样的错误(Bug),这些错误可以分成两类:编译时错误和运行时错误。
因为Java程序是先编译,再解释运行的,因此先出现编译错误,然后再出现解释错误。
即使程序编译通过(语法没有问题),也不一定表示你的程序完全没有问题,因为可能还有运行时错误。
编译时错误就是使用javac编译Java源文件遇到的语法错误,除此以外还有找不到源文件的问题
运行时错误就是使用java解释执行字节码文件遇到的错误(Bug)和异常
在排查运行时错误的时候如果你修改了源文件的代码,那么一定要重新编译,否则你修改的内容不会生效
在遇到错误后也不要慌,Java会告诉你错在哪里(行号),大家如果解决不了还可以利用网络搜索问题的答案,因为你们遇到的大部分错误在之前别人也遇到过。
通过多看实现具备识别Bug的能力
通过多思考、多查阅资料实现具备分析Bug的能力
通过多尝试、多总结实现具备解决Bug的能力
第一种情况:源文件路径不正确
HelloWorld.java源文件在D:\code目录下
但是启动终端后默认在C:\Users\liuguanglei目录下,如果使用javac编译HelloWorld.java就会出现编译错误:找不到文件
解决办法就是在Windows终端下切换到D:\code目录下再使用javac HelloWorld.java编译源文件
切换盘符:输入盘符:(例如D:)然后回车即可
切换路径:使用cd 路径然后回车即可,cd只能在盘符内切换
第二种情况:源文件文件名不正确
解决方案就是将源文件名改正确即可
错误案例
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");
}
}
错误案例
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
解决方案:将中文的分号;替换成英文的分号;即可,因为Java不识别中文分号
大家需要注意的是Java代码中各种符号必须是英文,例如{},(),[],;都是英文的
建议设置输入法开启 中文输入时使用英文标点,这样就不需要切换到英文输入法再输入符号**。**
以微软拼音为例
依次点击输入法>设置
打开微软拼音输入法设置
选择常规
打开中文输入时使用英文标点
当前使用的Java版本是Java17
如果你的Java版本是Java17及其以下的版本,例如Java11或者Java8,编译以下程序
public class HelloWorld{
public static void main(String[]args){
System.out.println("跟光磊学Java从小白到架构师");
}
}
就会出现编译错误:编码 GBK 的不可映射字符 (0x88)
原因就是编码和解码的不是同一个编码,这两个编码不一致导致的乱码
在Windows终端中可以使用chcp查看终端编码,如果输出结果是936则表示GB2312编码,GB2312是一种双字节编码,用于表示简体中文字符。
解决方案1:将文件另存为的时候设置编码为ANSI
文件>另存为
设置文件编码为ANSI,点击保存
确认另存为HelloWorld时会提示 **HelloWorld.java已经存在。要替换它吗?**点击是即可
此时文件编码从UTF-8改成ANSI,ANSI在中文环境下就是中文编码,等价GB2312
再编译和解释运行HelloWorld
解决方案2:不修改源文件编码,但是在编译时指定文件编码
javac -encoding UTF-8 HelloWorld.java
解决方案3:使用Java21
Java18以后默认使用UTF-8编码
public class HelloWorld{
public static void main(String[]args){
System.out.println("跟光磊学Java从小白到架构师");
}
}
主类表示有main方法的类,找不到或者无法加载主类的原因就是当前路径下没有指定的字节码文件或者类中没有main方法
解决方案:先使用javac HelloWorld.java编译生成字节码文件,再使用java HelloWorld解释运行程序
错误案例
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){
}
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。