Java概述与Windows版Java开发环境搭建
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方面的不断成熟,已经成为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 | 2004/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 |
注意事项
-
Java5和JDK1.5指的是同一个版本,Java8和JDK1.8指的是同一个版本
-
Java7以后Java由Oracle发布
-
Java8是目前公司使用的主流版本
-
Java9以后每半年发布一个版本,每3年发布一个长期支持版本,例如Java8,Java11,Java17是长期支持版本。
1.2 Java特点
由于Java语言是开源的,也得到了很多大公司的支持(Oracle,Amazon,Google,Alibaba、HUAWEI、Tencent)的支持,逐渐发展成了具有简单易学、开源、跨平台(可移植)、体系结构中立、安全性、高性能、健壮型、支持面向对象、多线程、分布式、动态性等诸多特点的开发平台和运行平台。
-
Java是简单易学:Java是C/C++的基础之上发展而来,不同于C/C++的是Java是纯粹的面向对象的语言,Java舍弃了C语言中特别容易引起错误的指针,并且引入了垃圾回收机制,这样在大部分场景下不需要手动释放内存,而且Java还舍弃了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项目对外提供服务。
-
Java是体系结构中立,体系结构中立有两层含义,①JVM的实现只需要遵守Oracle官方提供的JVM规范即可,不过大部分Java应用都是使用的Oracle官方提供的HotSpot虚拟机,除此以外一些互联网大厂(HUAWEI、Alibaba、Tencent)会根据自己的需求定制JDK。②JVM除了可以识别Java编译器(javac)编译生成的字节码文件以外,还可以识别Groovy、Scala、 JRuby、Kotlin等计算机语言生成的字节码文件。
1.3 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、JavaME三者之间的关系
1.4 Java应用场景
Java主要是擅长企业级应用开发(大型分布式系统的后台开发)、大数据平台开发、Android应用开发三个开发方向
-
企业级应用开发 :主要指复杂的大企业软件系统、各种类型网站后台系统。 Java的安全机制以及它的跨平台优势,在大型分布式系统领域开发中有广泛应用。包括电商、物流、金融、电信、社交、外卖、出行等。
-
大数据平台开发 :各类大数据平台开发框架有 Hadoop,Spark、Flink 等,就这类技术生态圈来讲,还有各种中间件如 Flume,Kakfa,Sqoop等,这些框架以及工具大多数是用 Java 编写而成,但提供诸如 Java,Scala,Python,R等各种语言API。
-
Android应用开发 :Android应用程序使用Java语言编写,Android开发水平的高低很大程度上取决于 Java是否扎实 。
Java语言是这三个开发方向的基石语言,无论选择哪个开发方向,首先必须要学习Java语言,然后根据市场的需求再结合自己的兴趣选择对应的开发方向。
根据现在的市场就业形势,一般大部分人都会选择企业级应用开发(大型分布式系统的后台开发),然后积累2-3年工作经验以后有兴趣可以转向大数据平台开发。
基本的学习路线:JavaSE->JavaEE->大数据
1.5 JDK和JRE
1.5.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.5.2 图解JDK、JRE和JVM的关系
1.5.3 5.3 如何选择JDK版本
首先需要了解下Oracle Java SE Support Roadmap
LTS表示Oracle官方长期支持的版本,例如Java8,Java11,Java17,Java21,其中Java8官方支持到2030年12月,Java17官方支持到2029年9月,Oracle官方每3年发布一个LTS版本
non-LTS表示非Oracle官方长期支持的版本(测试版),例如Java9,Java10,Java12,Java13,Java14等等都是non-LTS版本,Oracle官方每半年(在每年的3月份和9月份)发布一个non-LTS版本
选择JDK版本的时候分两种情况
-
学习Java的时候可以选择高版本的JDK,但是必须是LTS版本,例如Java17
-
去公司开发Java项目的时候,公司已有的项目用什么JDK版本,那么你就优先使用什么JDK版本,公司从0开始开发项目,那么优先选择稳定而且是官方长期支持的版本,例如Java8或者Java17,目前国内大部分的互联网公司现有的Java项目依然使用Java8,未来(2-3年以后)会逐步升级到Java17,一些开源框架依赖的JDK也从Java8已经升级到Java17,例如Spring Framework,Spring Boot等等。
2. Windows版Java8开发环境搭建
2.1 Windows版Java8下载
- 访问Java的官网,其访问地址是https://www.oracle.com/java/
- 点击右下角的Download Java,跳转到Java的下载页面
Java的下载地址是https://www.oracle.com/java/technologies/downloads/
目前(2023/07/12)Oracle官方提供的最新Java版本(JDK版本)是Java20和Java17,但是最新的LTS版本是Java17
本次我们下载的是Java8,所以往下滚动鼠标到Java8的下载
目前Java8支持四个操作系统
-
Linux
-
macOS
-
Solaris
-
Windows
大家在下载Java8的时候需要根据自己所使用操作系统的版本选择对应版本的Java8
- 选择Windows版 Java8 x64 Installer
Q:如何知道使用Windows版本
A:在设置(Windows+i)->系统->系统信息->Windows规格查看系统版本信息
由于使用的操作系统是Windows11 2022 H2 ,因此选择Windows x64 Installer 的jdk-8u371-windows-x64.exe
x86 Installer 表示32位Java8安装程序
x64 Installer 表示64位Java8安装程序
选择32位还是64位是根据系统类型来决定的,强制要求开发者全部使用64位系统,因为32位系统只能使用4G内存,现在做软件开发4G内存肯定是不够用的。
4.下载Windows版 Java8 x64 Installer
5.注册、登录Oracle账户
如果没有Oracle账户,大家可以在注册页面填写相应的信息注册Oracle账户
账户创建成功以后,在登录页面填写账户信息登录Oracle账户
登录成功之后浏览器会自动下载Java8
当Java8下载完成后 默认在下载目录(C:\Users\liuguanglei\Downloads)下会看到Java8的安装包jdk-8u371-windows-x64.exe
2.2 Windows版Java8安装
2.2.1 Windows版Java8安装过程
- 双击Windows版Java8的安装包jdk-8u371-windows-x64.exe启动安装器
在弹出的目前无法访问 SmartScreen点击运行即可
在弹出的**用户账户控制,你要允许此应用对你的设备进行更改吗?**选择是即可
- 下一步
- 定制安装
安装组件默认情况下包含了开发工具、源代码和公共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,javap
- src.zip:存放Java源代码文件(.java结尾的文件)
例如String.java
2.3 Windows版Java8配置
2.3.1 Java8配置JAVA_HOME环境变量
2.3.1.1 为什么Java8要配置JAVA_HOME环境变量
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_HOME环境变量以后,mvn --version会输出maven版本信息以及依赖的Java信息
2.3.1.2 Java8配置JAVA_HOME环境变量
- 打开系统属性面板
依次打开设置(Windows+i)>系统->系统信息>高级系统设置
然后会弹出系统属性面板
- 点击系统属性面板的环境变量
环境变量分为用户变量和系统变量,二者的区别是作用范围不同
用户变量只针对当前用户有效,系统变量针对所有用户都有效
建议使用系统变量
- 配置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后回车
就可以打开终端
验证JAVA_HOME环境变量是否配置成功
2.3.2 Java8配置Path环境变量
2.3.2.1 Path环境变量是什么?
Path环境变量的变量名是Path,变量值就是一系列路径,例如%SystemRoot%,%SystemRoot%\system32等等。
其中%SystemRoot%表示Windows系统根路径 C:\Windows
可以在终端上输入echo %SystemRoot%命令查看
Path环境变量的作用就是当我们在终端上输入命令回车后,系统会从当前路径和Path环境变量指定的路径查找命令对应的可执行程序,然后执行程序。
当我们在终端上输入notepad命令回车后
系统会打开notepad对应的记事本程序
notepad命令对应的记事本程序路径是C:\Windows\notepad.exe
但是如果我们输入一个不存在的命令(例如notepadxxx),那么系统无法运行该命令对应的可执行程序,然后会提示 不是内部或外部命令,也不是可运行的程序或批处理文件。
2.3.2.2 Path环境变量的使用
需求:实现在终端的任意路径下输入QQ就可以启动QQ
- 找到QQ安装目录的bin目录 先右键点击位于桌面的QQ快捷方式,然后选择属性
然后在属性面板中点击打开文件所在的位置(F)
打开QQ安装目录的bin目录(C:\Program Files (x86)\Tencent\QQ\Bin)
- 打开系统属性面板
依次打开设置(Windows+i)>系统->系统信息>高级系统设置
然后会弹出系统属性面板
- 点击系统属性面板的环境变量
- 配置QQ的Path环境变量
首先点击系统变量的Path,然后再点击编辑
然后将QQ的bin目录(C:\Program Files (x86)\Tencent\QQ\Bin)添加到Path环境变量中
- 点击三次确定关闭系统属性面板,完成QQ的Path环境变量配置
- 验证QQ的Path环境变量是否配置成功
首先重新开启一个终端,然后在终端的任意路径输入QQ看其是否能够启动成功,如果能够启动则表示QQ的Path环境变量配置成功
2.3.2.3 为什么Java8要配置Path环境变量
假设不配置Java8的Path环境变量,在终端上使用javac和java的时候,系统会提示 不是内部或外部命令,也不是可运行的程序或批处理文件。
因为Java8提供的开发工具(javac,java)需要在终端上使用,如果你双击运行javac和java,它们就会启动终端运行然后直接闪退。
为了在终端的任意路径下使用javac和java,因此我们需要将Java8安装目录的bin目录添加到Path环境变量中
-
javac 用于编译java源文件(.java结尾的文件),编译成功之后会生成字节码文件(.class结尾的文件)
-
java 用于解释执行字节码文件,运行Java程序
2.3.2.4 Java8配置Path环境变量
- 打开系统属性面板
右键点击开始菜单,搜索环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
- 点击系统属性面板的环境变量
环境变量分为用户变量和系统变量,二者的区别是作用范围不同
用户变量只针对当前用户有效,系统变量针对所有用户都有效
建议使用系统变量
- 配置Java8的PATH环境变量
首先点击系统变量的Path环境变量,再点击编辑
然后将Java8安装目录的bin目录(C:\Program Files\Java\jdk-1.8\bin)添加到Path环境变量中,
并且置顶
- 依次点击三次确定,关闭系统属性面板,完成Java8的Path环境变量配置
- 验证Java8的Path环境变量是否配置成功
验证Java8的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径输入javac -version和java -version并回车,然后查看终端是否能够输出java编译器版本信息和java解释器版本信息
2.3.2.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
- 依次点击三次确定,关闭系统属性面板,完成Java8使用JAVA_HOME配置Path环境变量
- 验证Java8的Path环境变量配置是否成功
验证Java8的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径输入javac -version和java -version并回车,然后查看终端是否能够输出java编译器版本信息和java解释器版本信息
2.4 Windows版Java8卸载
Q:什么时候需要卸载Java8
A:如果不再使用(例如公司项目全部使用Java17开发)Java8时就可以将其卸载
Windows版Java8的卸载需要删除Java8相关环境变量(Path环境变量、JAVA_HOME环境变量)以及Java8程序
2.4.1 删除Java8 Path环境变量
1.打开系统属性面板
右键点击开始菜单,搜索环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
- 点击系统属性面板的环境变量
- 删除Java8的Path环境变量
首先选择系统变量的Path,然后点击编辑
然后选择Java8的Path环境变量%JAVA_HOME%\bin,点击删除即可
- 依次点击三次确定关闭系统属性面板,完成Java8的Path环境变量删除
- 验证Java8的Path环境变量是否删除成功
重新开启一个新的终端,在终端的任意路径下输入javac -version和java -version,如果系统提示javac和java不是内部或外部命令,也不是可运行的程序或批处理文件则表示删除成功
2.4.2 删除Java8 JAVA_HOME环境变量
1.打开系统属性面板
右键点击开始菜单,搜索环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
- 点击系统属性面板的环境变量
3.删除Java8的JAVA_HOME环境变量
选择系统变量的JAVA_HOME,点击删除
- 依次点击两次确定关闭系统属性面板完成Java8 JAVA_HOME环境变量的删除
- 验证Java8 JAVA_HOME环境变量是否删除成功
重新开启一个终端,然后在终端上输入echo %JAVA_HOME% 回车后如果不能输出Java8的安装路径,而是输出%JAVA_HOME%那么表示Java8 JAVA_HOME环境变量删除成功
2.4.3 卸载Java8程序
- 打开安装的应用
右键点击开始菜单,然后左键选择安装的应用
此时可以查看安装的应用
- 在安装的应用中搜索Java
- 选择Java8,点击卸载
确认卸载
然后在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗? 选择是即可
接下来就会开始卸载,此过程大概几秒钟
卸载成功后在安装的应用中找不到Java8
2.5 Java8收费怎么办?
Oracle Java archive归档了所有Java版本
在2019年以后Java8后续更新的版本就开始收费,但是主要针对的是企业用户,对于个人学习没有任何影响。
Java SE 8 (8u202 and earlier)在生产环境是可以免费使用
Java SE 8 (8u211 and later)在生产环境是需要付费使用
由于Java虚拟机规范是开放的,任何企业或者是个人都可以实现它
我们常用的Oracle JDK只是Oralce公司的一种具体实现,其他企业和个人可以根据规范自己开发JDK。
常见的JDK有如下几种
-
Oracle JDK
-
Open JDK
-
国外的IBM、Amazon、SAP、Eclipse、Azul以及国内的阿里、腾讯、华为都有自己的JDK
即使Oracle公司的Java8在生产环境收费,我们也可以选择其他公司免费版本的Java8,例如Amazon Corretto、Azul Zulu等等。
3. Windows版Java17开发环境搭建
3.1 Windows版Java17下载
- 访问Java的官网,其访问地址是https://www.oracle.com/java/
- 点击右上角的Download Java,跳转到Java的下载页面
Java的下载地址是 https://www.oracle.com/java/technologies/downloads/
目前Oracle官方提供的最新Java版本是Java20和Java17,但是最新的LTS版本是Java17,因此点击下载页面的Java17切换到Java17
根据 Oracle 免费条款和条件,JDK 17 二进制文件可以在生产环境中免费使用,并且可以免费重新分发。
目前Java17支持三个系统
-
Linux
-
macOS
-
Windows
大家在下载Java17的时候需要根据自己所使用操作系统的版本选择对应版本的Java17
- 选择Windows版 x64 Installer Java17
Q:如何知道使用Windows版本
A:在设置(Windows+i)->系统->系统信息->Windows规格查看系统版本信息
由于使用的操作系统是Windows11 2022 H2 ,因此选择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
和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启动安装程序
在弹出的目前无法访问 SmartScreen点击运行即可
在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗?选择是即可启动安装程序
- 点击下一步
- 选择目标文件夹
默认安装路径是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目录
- lib目录
3.3 Windows版Java17配置
3.3.1 Java17配置JAVA_HOME环境变量
3.3.1.1 为什么Java17要配置JAVA_HOME环境变量
JAVA_HOME表示Java的安装路径,例如C:\Program Files\Java\jdk-17
后期我们会使用到Java开发的一些工具,例如Tomcat、Maven、JMeter等等,这些工具都会依赖JAVA_HOME环境变量。如果你不配置就无法正常使用,而且这些工具会提示你配置JAVA_HOME环境变量。
例如在终端位于Tomcat的bin目录下执行 startup.bat脚本启动Tomcat时会提示需要配置JAVA_HOME环境变量
而只有配置JAVA_HOME环境变量以后,在终端位于Tomcat的bin目录下执行 startup.bat脚本才能正常启动Tomcat
启动成功之后在浏览器地址栏输入127.0.0.1:8080可以访问Tomcat首页
不过启动之前需要将位于Tomcat配置文件目录(D:\soft\apache-tomcat-10.1.9\conf)的Tomcat日志配置文件logging.properties
关于控制台编码由默认的UTF-8改成GBK,否则终端启动会乱码
java.util.logging.ConsoleHandler.encoding = GBK
3.3.1.2 Java17配置JAVA_HOME环境变量
- 打开系统属性面板
依次打开设置(Windows+i)>系统->系统信息>高级系统设置
然后会弹出系统属性面板
- 点击系统属性面板的环境变量
环境变量分为用户变量和系统变量,二者的区别是作用范围不同
用户变量只针对当前用户有效,系统变量针对所有用户都有效
Windows电脑通常只有一个人使用,不太可能有多个用户,因此建议使用系统变量
- 配置Java17的JAVA_HOME环境变量
点击系统变量的新建(W),然后输入变量名和变量值
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk-17
- 依次点击三个确定,关闭系统属性面板,完成Java8的JAVA_HOME环境变量配置
- 验证Java17的JAVA_HOME环境变量配置是否成功
验证的方法就是启动一个终端,然后在终端输入echo %JAVA_HOME%,如果能够输出Java的安装路径表示配置成功
Q:如何启动终端
A:在文件资源管理器(Windows+E)的地址栏输入cmd回车后
就可以打开终端
验证JAVA_HOME环境变量是否配置成功
3.3.2 Java17配置Path环境变量
3.3.2.1 Java17自动配置Path环境变量
在安装Java17以后,Java17会自动配置Path环境变量
不过配置的路径是C:\Program Files\Common Files\Oracle\Java\javapath,该路径下只有javac、java、javaw和jshell四个工具
这样也就意味着可以在终端的任意路径下使用javac和java
但是无法在终端的任意路径下使用其他的工具,例如jconsole、jps、jstack等等,因此建议手动配置Java17的Path环境变量。
3.3.2.2 Java17手动配置Path环境变量
- 打开系统属性面板
右键点击开始菜单,搜索环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
- 点击系统属性面板的环境变量
- 配置Java17的PATH环境变量
首先点击系统变量的Path环境变量,再点击编辑
将Java17安装目录的bin目录(C:\Program Files\Java\jdk-17\bin)添加到Path环境变量中
并且置顶
置顶成功
然后将Java17自动配置的Path环境变量删除
- 依次点击三次确定,关闭系统属性面板,完成Java17的Path环境变量配置
- 验证Java17的Path环境变量是否配置成功
验证Java17的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径输入javac -version和java -version并回车,然后查看终端是否能够输出java编译器版本信息和java解释器版本信息
3.3.2.3 Java17使用JAVA_HOME配置Path环境变量
Q:为什么Java17要使用JAVA_HOME配置Path环境变量
A:切换JDK版本时只需要修改JAVA_HOME环境变量的值即可
- 打开系统属性面板
右键点击开始菜单,搜索环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
- 点击系统属性面板的环境变量
- 配置Java17的PATH环境变量
首先点击系统变量的Path环境变量,再点击编辑
将Java17的Path环境变量由C:\Program Files\Java\jdk-17\bin
改成%JAVA_HOME%\bin
- 依次点击三次确定,关闭系统属性面板,完成Java17使用JAVA_HOME配置Path环境变量
- 验证Java17的Path环境变量配置是否成功
验证Java17的Path环境变量是否配置成功的方法就是重新开启一个终端,然后在终端的任意路径输入javac -version和java -version并回车,然后查看终端是否能够输出java编译器版本信息和java解释器版本信息
3.4 Windows版Java17卸载
3.4.1 Windows版Java17卸载说明
Q:什么时候需要卸载Java17
A:如果不再使用(例如在未来的某天公司项目全部使用Java21开发)Java17时就可以将其卸载
Windows版Java17的卸载需要删除Java17相关环境变量(Path环境变量、JAVA_HOME环境变量)以及Java17程序
3.4.2 删除Java17 Path环境变量
- 打开系统属性面板
右键点击开始菜单,搜索环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
- 点击系统属性面板的环境变量
- 删除Java17的Path环境变量
首先选择系统变量的Path,然后点击编辑
然后选择Java17的Path环境变量%JAVA_HOME%\bin,点击删除即可
- 依次点击三次确定关闭系统属性面板,完成Java17的Path环境变量删除
- 验证Java17的Path环境变量是否删除成功
重新开启一个新的终端,在终端的任意路径下输入javac -version和java -version,如果系统提示javac和java不是内部或外部命令,也不是可运行的程序或批处理文件则表示删除成功
3.4.3 删除Java17 JAVA_HOME环境变量
- 打开系统属性面板
右键点击开始菜单,搜索环境变量,然后选择编辑系统环境变量
然后会弹出系统属性面板
- 点击系统属性面板的环境变量
- 删除Java17的JAVA_HOME环境变量
选择系统变量的JAVA_HOME,点击删除
- 依次点击两次确定关闭系统属性面板完成Java8 JAVA_HOME环境变量的删除
- 验证Java17 JAVA_HOME环境变量是否删除成功
重新开启一个终端,然后在终端上输入echo %JAVA_HOME% 回车后如果不能输出Java17的安装路径,而是输出%JAVA_HOME%那么表示Java17 JAVA_HOME环境变量删除成功
3.4.3 卸载Java17程序
- 打开安装的应用
右键点击开始菜单,然后左键选择安装的应用
此时可以查看安装的应用
- 在安装的应用中搜索Java
- 选择Java17,点击卸载
确认卸载
然后在弹出的用户账户控制,你要允许此应用对你的设备进行更改吗? 选择是即可
接下来就会开始卸载,此过程大概几秒钟
卸载成功后在安装的应用中找不到Java17
3.5 Windows版Java17和Java8相互切换
3.5.1 如何实现Java17和Java8相互切换
由于开发项目时使用Java8,但是学习JDK新特性时安装了Java17,因此此时机器上同时存在两个不同版本的JDK
那么如何在这两个版本中间切换?
首先需要知道当前使用的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环境变量的变量值修改成Java8的安装路径
然后重新开启一个终端,在终端的任意路径上输入javac -version和java -version,查看输出的版本信息是否为Java8即可
3.5.3 Windows版Java8切换到Java17
从Java8再次切换到Java17,只需要将JAVA_HOME环境变量的变量值改成Java17的安装路径
然后重新开启一个终端,在终端的任意路径上输入javac -version和java -version,查看输出的版本信息是否为Java17即可
4. Windows版第一个Java程序开发
4.1 Java程序的开发流程
-
编写:使用Java开发工具编写源文件,源文件以.java结尾,用于存储Java代码
-
编译:使用javac把源文件编译生成字节码文件,字节码文件以.class结尾,字节码文件名和类名相同,字节码文件的数量和源文件中class的数量相同,编译的格式是javac 源文件名.java,例如javac HelloWorld.java
-
运行:使用java解释运行编译生成后的字节码文件,运行的格式是java 字节码文件名(不需要.class后缀),例如java HelloWorld
Q:如何看待Java是一门半编译半解释型的语言?
A:半编译半解释指的是JVM在解释执行既有解释器解释执行,又有JIT编译器编译执行
4.2 Java开发工具介绍
虽然JDK提供了开发Java程序时所用到的一些工具,例如javac,java,jdb,jconsole等等
但是JDK并没有提供编写Java代码的开发工具,因此想要在编写Java程序之前,还需要了解Java开发工具, 我这里把Java开发工具分成两类,分别是文本编辑器和IDE
-
文本编辑器
Visual Studio Code和Sublime Text都是高级的文本编辑器,而且是跨平台的(Windows,macOS,Linux),建议初学Java的朋友可以使用它们来开发Java程序,因为相比IDE而言更加轻量级,对初学者更加容易上手。
-
IDE(Integrated Development Environment)
IDEA和Eclipse都是IDE,IDE集成项目开发中常用的功能,包括编辑器、编译工具、反编译工具、测试工具、性能分析工具、部署工具等等,因此可以大大提高开发效率。
目前大部分互联网公司基本普遍都会使用IntelliJ IDEA开发Java项目,因此我们后期会全程使用IntelliJ IDEA。
如果你还在上大学而且刚好学的计算机专业,那么大概率你的Java老师教你使用的Eclipse。
4.3 第一个Java程序开发
在学习任何一门编程语言时编写的第一个程序通常都称为HelloWorld
如果你能够编写并且运行HelloWorld,那么意味着已经迈入编程的大门
本次我们使用比较原始的开发方式:也就是基于记事本+Windows终端+JDK提供的开发工具(javac和java)来开发人生第一个Java程序,这种方式虽然和使用IDE开发相比效率比较低,但是能够让初学者更加直观地理解Java程序的开发和运行流程。
- 新建code文件夹
在D盘目录下,鼠标右键新建>文件夹
将文件夹的名称改为code,用于存放Java源文件
- 显示文件后缀名
默认情况下Windows是隐藏已知文件扩展名
建议在新建源文件之前勾选文件扩展名,这样才能显示文件扩展名
- 新建Java源文件
在code文件夹下 右键新建>文本文档
将默认的文件名新建 文本文档.txt 重命名为HelloWorld.java
选中新建 文本文档.txt,然后右键,选择重命名
重命名时系统会提示如果改变文件扩展名,可能导致文件不可以,确实要更改吗?,点击是即可
这样 HelloWorld.java源文件创建成功
- 编辑源文件
选中HelloWorld.java,右键选择 打开方式>选择其他应用
然后选择使用记事本打开
HelloWorld.java源文件打开后就可以开始编写Java代码
然后在HelloWorld.java源文件中编写HelloWorld
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
在使用记事本编写Java代码时
-
如果觉得代码字体太小,可以按住Ctrl键,然后向上滚动鼠标放大字体
-
代码需要进行适当的缩进
-
代码中遇到了符号,比如说圆括号(()),方括号([]),大括号({})都需要成对编写,然后再往里面编写内容,而且这些符号都是英文的,因为Java是美国人发明的,不支持中文。
编写完成后按Ctrl+s保存
- 编译源文件
首先需要开启Windows终端,因为javac和java只能在Windows终端上使用。
这里建议直接在文件资源管理器的地址栏输入cmd后回车开启终端
由于文件资源管理器的地址栏位于D:\code,因此开启终端后会自动切换到D:\code
然后输入javac HelloWorld.java并回车 编译源文件
如果没有语法错误编译成功之后会生成HelloWorld.class文件
- 解释运行字节码文件
在终端上输入java HelloWorld后回车解释执行HelloWorld.class字节码文件
如果没有任何运行时错误就会看到Windows终端打印输出HelloWorld并换行
4.4 第一个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数量一致的字节码文件,字节码文件名和类名相同。
public class World{
public static void main(String[] args){
System.out.println(“HelloWorld”);
}
}class Chinese{
}
class American{
}
编译和运行World.java程序后会生成3个字节码文件,分别是World.class、Chinese.class和American.class,因为World.java中定义了3个类。
-
public static void main(String[] args){} 格式是固定的,表示main方法,main方法是Java程序的入口,Java程序是从main方法的第一行开始执行的,该方法被JVM调用,如果你的Java程序想要独立运行,那么必须要固定格式的main方法
-
System.out.println(“HelloWorld”); 的作用就是在终端上打印输出字符串HelloWorld 然后换行,如果想输出其他内容只需要替换"HelloWorld"即可,;表示语句的结束**,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程序
由于程序中打印的内容包含了中文,但是源文件编码使用UTF-8,而Windows终端默认使用GBK编码, -encoding UTF-8表示使用UTF-8编码编译源文件,这样可以程序输出结果出现避免乱码问题。
4.5 第一个Java程序常见问题
4.5.1 编译时错误和运行时错误
初学者在开发第一个Java程序时可能会遇到各种各样的错误,这些错误可以分成两类:编译时错误和运行时错误。
因为Java程序是先编译,再解释运行的,因此先出现编译错误,然后再出现解释错误。
即使程序编译通过(语法没有问题),也不一定表示你的程序完全没有问题,因为可能还有运行时错误。
-
编译时错误就是使用javac编译Java源文件遇到的语法错误,除此以外还有找不到源文件的问题
-
运行时错误就是使用java解释执行字节码文件遇到的错误和异常
在排查运行时错误的时候如果你修改了源文件的代码,那么一定要重新编译,否则你修改的内容不会生效
在遇到错误后也不要慌,Java会告诉你错在哪里,大家如果解决不了还可以利用网络搜索答案,因为你们遇到的大部分错误在之前别人可能也遇到过。
4.5.2 Java入门程序常见错误和解决方案
4.5.2.1 编译时错误:找不到文件
第一种情况:源文件路径不正确
HelloWorld.java源文件在D:\code目录下
但是启动终端后默认在C:\Users\liuguanglei目录下,如果使用javac编译HelloWorld.java就会出现找不到文件的错误
解决办法就是在Windows终端下切换到D:\code目录下再使用javac HelloWorld.java编译源文件
-
切换盘符:输入盘符:(例如D:)然后回车即可
-
切换路径:使用cd 路径然后回车即可,cd只能在盘符内切换
第二种情况:源文件文件名不正确
解决方案就是将原文件名改正确即可
4.5.2.2 编译时错误:找不到符号问题
错误程序案例
public class HelloWorld{
public static void main(string[]args){
System.out.println("Hello World");
}
}
解决方案:将string改成String,因为Java语法规定严格区分大小写,string和String表示完全不同的含义。
4.5.2.3 编译时错误:编码GBK不可映射字符
错误程序案例
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
解决方案:将中文的分号;替换成英文的分号;即可,因为Java不识别中文分号
大家需要注意的是Java代码中各种符号必须是英文,例如{},(),[],;都是英文的
4.5.2.4 编译时错误:乱码问题
错误程序案例
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在中文环境下就是中文编码
然后再编译运行HelloWorld
解决方案2:在编译时指定文件编码
javac -encoding UTF-8 HelloWorld.java
4.5.2.5 运行时错误:找不到或者无法加载主类
主类表示有main方法的类,找不到或者无法加载主类的原因就是当前路径下没有指定的字节码文件
解决方案:先编译生成字节码文件,再运行程序
4.5.2.6 运行时错误:找不到main方法的问题
错误程序案例
public class HelloWorld{
public static void mian(String[]args){
System.out.println("跟光磊学Java从小白到架构师");
}
}
解决方案:将mian改成main即可,Java程序想要独立运行必须包含固定格式的main方法