1.1 Java 语言简介与发展历程
Java 是一门面向对象的高级编程语言,以"跨平台、安全、稳定"为核心特性,自诞生以来长期占据编程语言排行榜前列,广泛应用于后端开发、移动端开发、大数据等领域。
1.1.1 起源与核心人物
- 起源背景 :1991 年,Sun 公司(后被 Oracle 收购)的"Green 项目"启动,目标是开发一种能在嵌入式设备(如电视机顶盒)上运行的语言,核心开发者包括 詹姆斯·高斯林(James Gosling)(被称为"Java 之父")。
- 语言命名:最初名为"Oak"(橡树),因商标冲突,1995 年正式更名为"Java"(源自印尼爪哇岛,象征"活力与广泛传播")。
- 首次发布:1995 年 Sun 公司在 SunWorld 大会上发布 Java 1.0,同时推出 Java Applet(早期网页交互技术,后因安全问题逐渐被淘汰)。
1.1.2 关键版本迭代(LTS 版本优先)
Java 版本分为"普通版本"和"长期支持版本(LTS)",LTS 版本提供 5-8 年官方支持,是企业生产环境的首选:
- JDK 1.5(2004 年):里程碑版本,引入泛型、枚举、注解、foreach 循环、自动装箱/拆箱等核心特性,奠定现代 Java 基础。
- JDK 8(2014 年):最经典的 LTS 版本,引入 Lambda 表达式、Stream API、Optional 类、接口默认方法,至今仍是企业主流。
- JDK 11(2018 年) :LTS 版本,移除永久代(改用元空间)、支持局部变量类型推断(
var
关键字)、自带 HttpClient 工具类。 - JDK 17(2021 年):最新 LTS 版本,引入密封类(Sealed Classes)、Record 类(简化实体类编写)、增强 Switch 表达式,性能大幅优化。
1.1.3 现在与未来
- 归属权:2009 年 Oracle 收购 Sun 公司,获得 Java 版权与开发权,目前 Oracle 每 6 个月发布一个普通版本,每 3 年发布一个 LTS 版本。
- 生态地位:Java 生态是编程语言中最完善的之一,拥有海量类库、框架(Spring、MyBatis)和工具,支持从小型应用到大型分布式系统的开发。
1.2 Java 核心优势与应用场景
Java 能长期流行,核心在于其独特的设计理念和广泛的适用性,具体优势与场景如下:
1.2.1 四大核心优势
-
跨平台性(一次编写,到处运行)
这是 Java 最核心的优势。Java 源文件编译后生成 字节码文件(.class) ,不直接依赖操作系统,而是通过 Java 虚拟机(JVM) 解释执行------不同操作系统(Windows、macOS、Linux)只需安装对应版本的 JVM,即可运行同一套字节码文件。
✅ 示例:在 Windows 上编写的 Java 程序,无需修改代码,复制到 Linux 服务器上(安装 Linux 版 JVM)即可直接运行。
-
纯面向对象编程(OOP)
Java 严格遵循面向对象思想,万物皆可"类与对象",支持封装、继承、多态三大特性,能更好地模拟现实世界,降低复杂系统的开发与维护成本。
❌ 例外:基本数据类型(如
int
、char
)不是对象,但可通过"包装类"(如Integer
)转为对象。 -
安全性与稳定性
- 安全机制:Java 自带"沙箱机制"(限制程序访问本地资源)、类加载器(防止恶意代码篡改核心类)、异常处理(避免程序崩溃),适合开发金融、支付等对安全要求高的系统。
- 内存管理 :通过 垃圾回收器(GC) 自动回收无用内存,无需手动释放(对比 C/C++ 的
free
/delete
),大幅减少内存泄漏问题。
-
生态丰富与社区活跃
- 官方提供庞大的 Java 核心类库(JDK API),涵盖 IO、集合、多线程、网络等功能,无需重复造轮子。
- 第三方框架(Spring Boot、MyBatis、Dubbo)、工具(Maven、Git)、社区(Stack Overflow、GitHub)成熟,问题能快速找到解决方案。
1.2.2 四大主流应用场景
应用领域 | 核心技术/框架 | 典型案例 |
---|---|---|
后端开发 | Java EE、Spring Boot、Spring Cloud | 电商系统(淘宝、京东)、金融系统(银行核心系统) |
移动端开发 | Android 原生开发 | 手机 APP(早期微信、抖音核心模块) |
大数据开发 | Hadoop、Spark、Flink | 数据计算(用户行为分析、实时推荐) |
桌面应用开发 | Swing、AWT(传统)、JavaFX | 企业内部工具(如报表系统、管理端) |
1.3 开发环境搭建(JDK 下载、安装、环境变量配置)
Java 开发的基础是 JDK(Java Development Kit,Java 开发工具包) ,必须先完成 JDK 安装与环境变量配置,才能编译和运行 Java 程序。以下以 JDK 17(LTS 版本,Windows 10/11 系统) 为例,步骤详细到"小白可follow":
1.3.1 第一步:下载 JDK
- 访问官方地址 :打开 Oracle 官网 JDK 下载页(链接),建议用 LTS 版本(如"Java SE 17 LTS")。
- 选择系统版本 :
- Windows 系统:根据电脑位数选择(64 位选"Windows x64 Installer",exe 格式;32 位选"Windows x86 Installer",目前主流电脑均为 64 位)。
- macOS 系统:选"macOS x64.dmg"(Intel 芯片)或"macOS AArch64.dmg"(M1/M2 芯片)。
- Linux 系统:选"Linux x64 RPM Package"或"Linux x64 Compressed Archive"(解压版)。
- 登录 Oracle 账号:Oracle 要求登录后才能下载,若无账号,点击"Create Account"注册(免费,填写邮箱、密码即可)。
- 开始下载:登录后点击对应版本的"Download",等待 exe 文件下载完成(约 200-300MB)。
1.3.2 第二步:安装 JDK
- 双击运行安装包 :打开下载的
jdk-17_windows-x64_bin.exe
,弹出安装向导,点击"下一步"。 - 选择安装路径(关键!) :
- 建议 自定义路径 (默认路径在 C 盘,若 C 盘空间不足可改到其他盘),例如:
D:\Program Files\Java\jdk-17
(路径中不能有中文、空格或特殊字符,否则后续会报错)。 - 记住这个路径(后续配置环境变量要用),点击"下一步"。
- 建议 自定义路径 (默认路径在 C 盘,若 C 盘空间不足可改到其他盘),例如:
- 等待安装完成:安装过程约 1-2 分钟,无需额外操作,最后点击"关闭"。
⚠️ 注意:JDK 11 及以上版本无需单独安装 JRE (JRE 已集成在 JDK 中,可通过
jlink
工具生成独立 JRE,新手暂无需关注)。
1.3.3 第三步:配置环境变量(Windows 系统)
环境变量的作用是让系统"找到"JDK 的编译工具(javac.exe
)和运行工具(java.exe
),否则在命令行输入 javac
会提示"不是内部或外部命令"。
步骤 1:打开环境变量设置
- 方法 1:右键"此电脑" → "属性" → "高级系统设置" → "环境变量"。
- 方法 2:Win + R 输入
sysdm.cpl
→ 回车 → "高级" → "环境变量"。
步骤 2:配置"JAVA_HOME"变量(用户变量/系统变量均可,推荐用户变量)
- 在"用户变量"栏点击"新建",弹出"新建用户变量"窗口:
- 变量名:
JAVA_HOME
(大小写敏感,必须全大写)。 - 变量值:粘贴第一步的 JDK 安装路径(例如
D:\Program Files\Java\jdk-17
)。
- 变量名:
- 点击"确定"保存。
步骤 3:配置"Path"变量
- 在"用户变量"栏找到"Path"变量,双击打开(或选中后点击"编辑")。
- 点击"新建",输入
%JAVA_HOME%\bin
(%JAVA_HOME%
是引用上一步的 JAVA_HOME 变量,自动指向 JDK 的 bin 目录)。 - 再点击"新建",输入
%JAVA_HOME%\jre\bin
(JDK 17 无单独 JRE 目录,可省略此步,若后续报错再补充)。 - 点击"上移",将这两个路径移到最顶部(避免与其他软件的 Java 版本冲突),然后依次点击"确定"关闭所有窗口。
步骤 4:验证配置是否成功
- 打开 新的命令提示符(CMD)(注意:必须关闭旧 CMD 重新打开,否则环境变量不生效)。
- 输入以下两个命令,若输出类似结果,则配置成功:
- 命令 1:
java -version
(查看 Java 运行环境版本)
✅ 成功输出:java version "17.0.9" 2023-10-17 LTS
(版本号可能因下载的 JDK 版本略有不同)。 - 命令 2:
javac -version
(查看 Java 编译器版本)
✅ 成功输出:javac 17.0.9
。
- 命令 1:
❌ 常见错误与解决:
- 若提示"'javac' 不是内部或外部命令":检查 JAVA_HOME 路径是否正确,Path 中是否添加
%JAVA_HOME%\bin
,且是否打开新 CMD。- 若提示"找不到或无法加载主类":暂不涉及,后续编写程序时再排查。
1.4 主流 IDE 使用(IntelliJ IDEA / Eclipse 基础操作)
IDE(集成开发环境)能简化 Java 开发(自动补全、语法检查、一键运行),主流工具是 IntelliJ IDEA(简称 IDEA) 和 Eclipse,新手推荐 IDEA 社区版(免费、功能足够入门)。
1.4.1 IntelliJ IDEA(社区版)使用教程
1. 下载与安装
- 官网地址:IntelliJ IDEA 下载页,选择"Community"(社区版,免费),下载对应系统版本。
- 安装步骤:
- 双击安装包,勾选"Create Desktop Shortcut"(创建桌面快捷方式)、"Associate .java files"(关联 .java 文件),点击"Next"。
- 安装路径建议自定义(如
D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2
),点击"Install",等待完成。
2. 首次启动配置
- 首次打开 IDEA,选择"Skip Remaining and Set Defaults"(跳过默认配置,新手无需修改)。
- 主题选择:可在"Appearance & Behavior → Appearance"中切换"Light"(浅色)或"Darcula"(深色,保护眼睛)。
- 配置 JDK:
- 打开"File → Project Structure → SDKs",点击"+"号,选择"JDK"。
- 浏览到 JDK 安装路径(如
D:\Program Files\Java\jdk-17
),点击"OK",IDEA 会自动识别 JDK 版本。
3. 创建第一个 Java 项目
-
点击"New Project",进入项目创建界面:
- 左侧选择"Java",右侧"Project SDK"选择已配置的 JDK 17,点击"Next"。
- 取消勾选"Create project from template"(不使用模板,从零开始),点击"Next"。
- 项目命名:例如"JavaHelloWorld",项目路径自定义(如
D:\JavaProjects\JavaHelloWorld
),点击"Finish"。
-
创建"包(Package)":
- 包用于分类管理 Java 类(避免类名冲突),右键
src
目录 → "New → Package",输入包名(命名规范:全小写,多层级用点分隔,如com.example.demo
),点击"OK"。
- 包用于分类管理 Java 类(避免类名冲突),右键
-
创建"Java 类(Class)":
- 右键包名(
com.example.demo
) → "New → Java Class",类名输入"HelloWorld"(命名规范:首字母大写,驼峰式),点击"OK"。
- 右键包名(
4. 编写与运行代码
-
在 HelloWorld 类中输入代码(IDEA 会自动补全):
javapackage com.example.demo; // 包名,必须在类的最顶部 public class HelloWorld { // main 方法:程序入口,固定格式 public static void main(String[] args) { // 输出语句:在控制台打印"Hello World!" System.out.println("Hello World!"); } }
-
运行程序:
- 方法 1:右键代码编辑区 → "Run 'HelloWorld.main()'"。
- 方法 2:点击类名旁的绿色三角形图标(▶️),选择"Run 'HelloWorld'"。
-
查看结果:底部"Console"面板会输出
Hello World!
,表示运行成功。
5. 常用快捷键(提升效率)
psvm
+ 回车:快速生成 main 方法(public static void main(String[] args)
)。sout
+ 回车:快速生成输出语句(System.out.println();
)。Ctrl + D
:复制当前行到下一行。Ctrl + Y
:删除当前行。Ctrl + /
:单行注释(//)或取消注释。
1.4.2 Eclipse(开源免费)简要对比
Eclipse 是老牌 IDE,开源免费,但界面和操作流畅度略逊于 IDEA,适合习惯轻量级工具的用户:
- 下载:官网 Eclipse 下载页,选择"Eclipse IDE for Java Developers"。
- 核心操作:创建项目(File → New → Java Project)、创建类(New → Class)、运行(右键 → Run As → Java Application),流程与 IDEA 类似。
- 优缺点:占用内存小,但自动补全、代码提示功能不如 IDEA 智能,新手建议优先选 IDEA 社区版。
1.5 第一个 Java 程序:HelloWorld(代码解析 + 运行流程)
"Hello World"是所有编程语言的入门案例,通过它可理解 Java 程序的基本结构、编译与运行逻辑。
1.5.1 完整代码与逐行解析
以下是标准的 HelloWorld 代码(基于 IDEA 中的 com.example.demo.HelloWorld
类):
java
// 1. 包声明:指定当前类所在的包,必须放在代码最顶部
package com.example.demo;
// 2. 类声明:public 是访问修饰符,HelloWorld 是类名(必须与文件名一致)
public class HelloWorld {
// 3. main 方法:程序的"入口",JVM 运行程序时会首先执行此方法
// public:公开访问权限,JVM 可调用
// static:静态方法,无需创建对象即可调用
// void:无返回值(不需要向调用者返回结果)
// main:方法名(固定,不能修改)
// String[] args:参数数组,用于接收命令行传入的参数(新手暂无需使用)
public static void main(String[] args) {
// 4. 输出语句:调用 System 类的 out 对象的 println 方法,在控制台打印字符串
// System:Java 核心类库中的类(位于 java.lang 包,无需手动导入)
// out:System 类的静态成员变量(类型是 PrintStream)
// println:PrintStream 类的方法,作用是"打印字符串并换行"
System.out.println("Hello World!");
}
}
⚠️ 必须遵守的语法规则:
- 类名与文件名一致:若类用
public
修饰,文件名必须和类名完全相同(大小写敏感),例如HelloWorld.java
对应public class HelloWorld
。- 分号结尾:Java 语句必须以
;
结束(println("...");
后的分号不能漏)。- 大括号配对:
class
、main
方法的代码块必须用{}
包裹,且要对齐(IDE 会自动格式化)。
1.5.2 两种运行方式(IDE 可视化 + 命令行)
方式 1:IDE 中运行(推荐新手)
如 1.4.1 节所述,右键类 → Run,直接在 Console 面板查看结果,IDE 会自动完成"编译 → 运行"的全过程,无需手动操作。
方式 2:命令行运行(理解底层流程)
通过命令行运行,能清晰看到 Java 程序"源文件 → 字节码 → 运行"的步骤,适合理解原理:
-
找到 .java 源文件路径 :
若 IDEA 项目路径是
D:\JavaProjects\JavaHelloWorld
,则 .java 文件路径为D:\JavaProjects\JavaHelloWorld\src\com\example\demo\HelloWorld.java
(包名对应文件夹层级)。 -
编译:javac 命令生成 .class 字节码文件:
- 打开 CMD,通过
cd
命令进入 .java 文件所在目录:
cd D:\JavaProjects\JavaHelloWorld\src\com\example\demo
。 - 输入编译命令:
javac HelloWorld.java
(javac
是 JDK 的编译器工具)。 - 若代码无语法错误,执行后会在当前目录生成
HelloWorld.class
文件(字节码文件,JVM 可识别的格式)。
- 打开 CMD,通过
-
运行:java 命令执行字节码:
- 注意:运行时需要"带包名"执行,因此不能在 demo 目录下直接运行,需回到 src 目录(包名的根目录):
cd ../../../../
(从 demo 目录回到 src 目录)。 - 输入运行命令:
java com.example.demo.HelloWorld
(java
是 JVM 的运行工具,后面跟"包名.类名",无需加 .class 后缀)。 - 执行后,CMD 会输出
Hello World!
,表示运行成功。
- 注意:运行时需要"带包名"执行,因此不能在 demo 目录下直接运行,需回到 src 目录(包名的根目录):
1.5.3 常见错误与解决
错误现象 | 原因分析 | 解决方法 |
---|---|---|
编译时提示"找不到符号" | 变量名/方法名拼写错误(如 sout 写成 soutt ) |
检查代码拼写,确保与标准语法一致 |
运行时提示"找不到或无法加载主类" | 运行命令未带包名,或包名与路径不匹配 | 回到 src 目录,用"包名.类名"格式运行(如 java com.example.demo.HelloWorld ) |
编译时提示"类 HelloWorld 是公共的,应在名为 HelloWorld.java 的文件中声明" | 文件名与 public 类名不一致(如文件名是 helloworld.java ) |
将文件名改为与类名完全一致(大小写敏感) |
1.6 Java 运行机制(JVM、JRE、JDK 关系 + 跨平台原理)
理解 Java 运行机制,是掌握 Java 跨平台特性的核心,也是后续学习 JVM 调优、性能优化的基础。
1.6.1 JVM、JRE、JDK 三者的关系
首先明确三个核心概念的定义,再通过"包含关系"和"比喻"理解它们的作用:
组件 | 英文全称 | 核心作用 | 包含内容 |
---|---|---|---|
JDK | Java Development Kit | Java 开发工具包,供开发者编写、编译程序 | JRE + 开发工具(javac、java、javadoc 等) |
JRE | Java Runtime Environment | Java 运行环境,供用户运行 Java 程序 | JVM + 核心类库(java.lang、java.util 等) |
JVM | Java Virtual Machine | Java 虚拟机,负责将字节码转为机器码执行 | 类加载器、执行引擎、垃圾回收器等 |
包含关系(从大到小):
JDK ⊇ JRE ⊇ JVM + 核心类库
(JDK 包含 JRE,JRE 包含 JVM 和运行所需的核心类库)
通俗比喻:
- 把 Java 程序比作"蛋糕":
- JDK 是"全套烘焙工具 + 食材 + 烤箱"(开发者用它做蛋糕)。
- JRE 是"食材 + 烤箱"(用户用它加热蛋糕吃,不需要烘焙工具)。
- JVM 是"烤箱"(核心设备,负责把"生蛋糕坯(字节码)"烤成"熟蛋糕(运行结果)")。
1.6.2 Java 程序完整运行流程
Java 程序从编写到运行,需经历 4 个步骤,每个步骤的作用如下:
-
编写:创建 .java 源文件
开发者用文本编辑器(或 IDE)编写 Java 代码,保存为
.java
后缀的源文件(人类可读的文本格式)。 -
编译:javac 编译为 .class 字节码
JDK 的
javac
编译器读取 .java 文件,检查语法错误后,将其转换为 字节码文件(.class) ------字节码是一种"中间代码",既不是机器码,也不是源文件,只能被 JVM 识别。✅ 关键:字节码文件是"平台无关"的,在 Windows 上编译的 .class 文件,可直接复制到 Linux 上运行。
-
加载:JVM 类加载器加载 .class
运行
java 类名
命令时,JVM 的"类加载器(ClassLoader)"会根据类名找到对应的 .class 文件,将其加载到 JVM 的内存中(方法区),并创建对应的 Class 对象(用于后续实例化)。 -
执行:JVM 执行字节码
JVM 的"执行引擎"会将字节码转换为当前操作系统能识别的 机器码 (平台相关),然后交给 CPU 执行,最终输出运行结果。
优化:为提升性能,JVM 会对"热点代码"(频繁执行的代码)采用 JIT(即时编译) 技术,将其直接编译为机器码缓存起来,避免每次都解释执行。
流程示意图(文字版):
.java 源文件 → [javac 编译] → .class 字节码文件 → [JVM 类加载] → [JVM 执行引擎(解释/编译为机器码)] → 操作系统执行 → 输出结果
1.6.3 跨平台原理(为什么"一次编写,到处运行")
Java 跨平台的核心在于 "字节码 + JVM"的分离设计:
- 字节码平台无关:无论在哪个操作系统上编译,生成的 .class 字节码格式都是统一的,不存在"Windows 字节码""Linux 字节码"的区别。
- JVM 平台相关:Oracle 为不同操作系统提供了对应的 JVM 实现(如 Windows 版 JVM、Linux 版 JVM),这些 JVM 能将统一的字节码转换为当前系统的机器码。
例如:
- 在 Windows 上:
Java 代码 → 字节码 → Windows 版 JVM → Windows 机器码 → 运行
。 - 在 Linux 上:
同一字节码 → Linux 版 JVM → Linux 机器码 → 运行
。
正是因为 JVM 屏蔽了不同操作系统的差异,开发者才无需为每个平台编写不同的代码,实现"一次编写,到处运行"。