[JavaSE] 01 - Java 概述和开发环境
因为是刚开始了解 Java,所以感觉还是记得详尽一些比较好。以后的笔记可能会更精简。
1.1 - Java 语言概述
Java 是一种面向对象、静态类型、强类型、跨平台的通用高级程序设计语言,由 Sun 公司于 1995 年正式发布,目前由 Oracle 公司主导维护和发展。
Java 的设计理念是 “Write Once, Run Anywhere”(一次编写,到处运行),即通过 Java 虚拟机(JVM)实现程序在不同操作系统上的跨平台运行。Java 广泛应用于企业级应用、Web 后端开发、分布式系统、大数据处理等领域,是现代软件开发的重要编程语言之一。
Java 之父 — James Gosling (1955)
1.1.1 - Java 的发展历史
Java 最初由 Sun Microsystems 的 James Gosling(詹姆斯·高斯林)等人开发,其发展经历了以下几个重要阶段。
| 时间 | 事件 |
|---|---|
| 1991 年 | Sun 启动 Green 项目,开发 Oak 语言,即 Java 的前身 |
| 1995 年 | Java 正式发布 |
| 1996 年 | JDK 1.0 发布 |
| 2004 年 | Java 5 发布,引入泛型、注解、枚举等重要特性 |
| 2006 年 | Sun 开始推动 Java 开源,形成 OpenJDK 项目 |
| 2010 年 | Oracle 收购 Sun Microsystems |
| 2014 年 | Java 8 发布,引入 Lambda 表达式、Stream API 等 |
| 2017 年 | Java 9 发布,引入模块系统 |
| 2018 年 | Java 11 发布,成为长期支持(LTS)版本 |
| 2021 年 | Java 17 发布,成为 LTS 版本 |
| 2023 年 | Java 21 发布,成为 LTS 版本 |
| 2025 年 | Java 25 发布,成为 LTS 版本 |
Java 早期版本更新周期较长,自 Java 9 起逐步采用约每六个月发布一个特性版本的机制。
1.1.2 - Java 的主要特点
一、面向对象
Java 以类(Class)和对象(Object)为核心,支持面向对象程序设计的主要机制:
- 封装(Encapsulation):隐藏对象内部实现细节,通过公开接口访问对象。
- 继承(Inheritance):允许子类复用和扩展父类的属性与行为。
- 多态(Polymorphism):允许同一接口或方法调用表现出不同的行为。
但 Java 并不是纯粹的面向对象语言,因为它还提供 int、double、boolean 等基本数据类型,它们不是作为对象存在的(反例有 SmallTalk 和 Ruby 语言,它们的数字、布尔等基础值也是对象)。
二、跨平台
Java 的跨平台能力主要依赖 JVM。Java 程序并不是通常情况下直接编译成某一操作系统的机器码,而是先编译成平台无关的字节码(Bytecode),再由对应平台的 JVM 执行。
因此,Java 字节码具有平台无关性,而 JVM 本身具有平台相关性,这是 Java 实现“一次编写,到处运行”的基础。
三、自动内存管理
Java 通过垃圾回收机制(Garbage Collection,GC)自动回收不再被使用的堆对象所占用的内存。
| C 语言 | Java |
|---|---|
常通过 malloc() 手动分配内存 | 通常使用 new 创建对象 |
需要通过 free() 手动释放动态内存 | 由垃圾回收器负责回收可回收对象的内存 |
| 容易出现悬空指针等问题 | 减少了许多手动内存管理问题 |
(但是,Java 的自动内存管理并不意味着完全不会发生内存泄漏,也不意味着文件、数据库连接等外部资源可以完全依靠 GC 自动管理。)
四、静态类型与强类型
Java 是静态类型语言,变量和表达式的类型在编译阶段受到检查,编译器能够提前发现许多类型错误,例如:
int age = 20;
age = "Hello"; // 编译错误Java 对类型转换有明确的规则,不允许任意将不同类型的数据相互赋值。此外,Java 在变量声明、方法参数、返回值以及泛型等方面提供了完整的类型系统。
五、多线程(Multithreading)
Java 内置多线程支持,能够通过 Thread、Runnable 及其他并发 API 实现并发程序。这是 Java 开发服务器程序、处理并发请求及后台任务的重要技术基础。
六、健壮性和安全性
Java 通过多种语言和运行时机制提高程序的可靠性与安全性,包括:
- 编译时类型检查;
- 数组边界检查;
- 异常处理机制;
- 自动内存管理;
- 字节码验证;
- 不提供 C 语言那样直接进行任意指针运算的能力。
这些机制能够降低部分常见错误发生的风险,但并不意味着 Java 程序天然不会出现安全漏洞。
1.2 - Java 平台
Java 平台(Java Platform)是一个用于开发、编译、运行 Java 程序的软件环境与技术体系。
从基础架构来看,Java 平台主要由 JVM、Java API、JRE 和 JDK 等部分构成。其中,JVM 和 Java API 是 Java 平台运行机制的核心,而 JRE 和 JDK 则分别面向程序运行与程序开发。
1.2.1 - Java 平台的组成部分
(注:从 Java 9 起,Java 类库和扩展库已经没有明确界限,它们共同构成 Java API)
JVM(Java 虚拟机)
JVM(Java Virtual Machine)是执行 Java 字节码的虚拟机,也是 Java 实现跨平台运行的重要基础。
JVM 的主要职责包括:
- 类加载(Class Loading):将类的字节码加载到 JVM 中。
- 字节码执行(Bytecode Execution):通过解释执行、即时编译器(JIT)等机制执行字节码。
- 运行时内存管理(Runtime Memory Management):管理堆、Java 虚拟机栈等运行时数据区域。
- 垃圾回收(Garbage Collection):自动回收不再可达的对象所占用的堆内存。
Java API
Java API 是 Java 平台提供的一系列标准类库和接口,为程序开发提供常用功能。
Java API(Java 应用程序编程接口)是一套“规范”,它告诉你可以调用那些类、方法,传入什么参数,会返回什么结果;其具体实现称为 Java 标准类库(Java Class Libraries),标准类库中是已经打包好的 .class 文件和 .jar 包。
例如,常见的 Java SE API 有:
| 包名 | 主要功能 |
|---|---|
java.lang | 核心语言支持,如 String、Object、Math |
java.util | 集合框架、工具类等 |
java.io | 传统输入输出操作 |
java.nio | 缓冲区、通道、文件操作等 |
java.net | 网络通信 |
java.time | 日期与时间处理 |
java.util.concurrent | 并发编程工具 |
JRE(Java 运行环境)
JRE(Java Runtime Environment)是运行 Java 程序所需的软件环境。
JRE 包括了:
- JVM;
- Java API(或者说标准类库);
- 其他运行时支持组件。
JRE 的主要目标是运行 Java 程序,而不是开发 Java 程序。
JDK(Java 开发工具包)
JDK(Java Development Toolkit) 为 Java 开发者提供了编写、编译、调试、打包和运行 Java 程序的能力。它是整个 Java 核心中最大的一个集合,包含了 JRE,以及所有开发工具。
开发工具(Tools For Developing Applications)包括了一系列命令行工具(在 JDK 的 bin 目录下),例如:
| 工具名称 | 核心功能 | 具体作用描述 |
|---|---|---|
javac | 编译器 | 将 .java 源代码编译成 JVM 可执行的 .class 字节码文件。 |
java | 启动器 | 运行编译好的 Java 程序(属于 JRE 范畴)。 |
javadoc | 文档生成器 | 提取代码注释,生成标准的 HTML API 文档。 |
jar | 打包工具 | 将多个 .class 文件打包成 .jar 压缩包,方便发布和引用。 |
jps / jstack / jconsole | 监控与排错工具 | 包含查看进程、打印线程堆栈、可视化监控 JVM 性能等调试工具。 |
因为 JRE 包含在 JDK 中,所以在现代 Java 开发中,通常只需要安装 JDK,无需另外安装 JRE。
1.2.2 - Java 平台的不同版本
Java 平台体系有三个主要方向,它们都包含 JVM 和一套应用程序编程接口(API):
| 版本 | 说明 | 主要应用 |
|---|---|---|
| Java SE(Standard Edition) | Java 标准版,提供语言基础与核心类库 | 通用程序开发、桌面应用、后端开发基础 |
| Jakarta EE(原 Java EE) | 面向企业级应用的规范体系 | 企业级 Web 应用、分布式业务系统 |
| Java ME(Micro Edition) | 面向资源受限设备的 Java 技术体系 | 部分嵌入式设备等 |
其中,Java SE 是学习 Java 的基础。Java SE 涵盖 Java 语言本身及其标准 API,例如面向对象、字符串、异常处理、集合框架、泛型、输入输出以及多线程基础等。
1.3 - Java 开发环境
Java 开发环境(Java Development Environment)是指开发 Java 程序所需的软件工具、运行环境及相关配置。
对于 Java SE,最基本的开发环境就是 JDK(Java Development Kit)+ 代码编辑工具。开发者通过 JDK 提供的编译器、运行工具等完成 Java 程序的编译与执行,并通常借助集成开发环境(IDE)提高开发效率。
1.3.1 - Java 开发环境的基本组成
| 组成部分 | 主要作用 | 是否必需 |
|---|---|---|
| JDK | 提供 Java 编译器、运行环境及开发工具 | 必需 |
| IDE / 代码编辑器 | 编写、调试和管理 Java 程序 | 非必需 |
| 环境变量 | 使终端及其他工具能够定位 JDK | 不配置无法在命令行全局使用 |
| 构建工具 | 自动化依赖管理、编译、测试和打包 | 简单程序不需要 |
关于 JDK 的版本和发行版:
- JDK 版本的选择:Java 有很多版本,其中部分版本是长期支持版本 LTS(如 Java 8、Java 17、Java 21等),对于 Java SE 的学习,可以直接使用最新的 LTS 版本的 JDK;
- JDK 发行版的选择:JDK 并非只有 Oracle 提供的官方版本,因为 Java 的核心源码(OpenJDK)是开源的,任何组织都可基于 OpenJDK 编译打包自己的“发行版”,它们在许可证、商业支持、平台优化等方面各有侧重。对于个人学习可使用 Eclipse Temurin 或 Oracle JDK。
关于 IDE(集成开发环境)的选择:
你可以使用记事本编写 Java 程序(值得尝试),但 IDE 无疑会带来更拟人的编程体验。
而 JetBrains 的 IntelliJ IDEA 无疑是 Java IDE 中的王者,它功能完整,具备非常丰富、易用的代码补全、重构、调试和项目管理等功能。如果你需要一个更轻量的选择,VSCode 当然也没问题。JetBrains 提供了官方的扩展插件,可在 VSCode 上提供 IDEA 的部分功能。
1.3.2 - Windows 系统开发环境配置
一、安装 JDK
如果你不想自己安装和配置 JDK,并且决定使用 IntelliJ IDEA,可以后续在 IDEA 中安装 JDK,IDEA 可以帮助你完成这些操作。
[Eclipse Temurin - 基于 OpenJDK,免费、应用广泛的 JDK 发行版]
https://adoptium.net/
[Eclipse Temurin - Oracle 官方发行版]
https://www.oracle.com/java/technologies/downloads/
不出意外的话,下载好镜像或安装程序后,启动并一路点击下一步即可。建议直接安装到默认路径,除非你不想在 C 盘安装任何软件。JDK 目录通常包含以下内容:
jdk-25/
├── bin/ # Java 所有的命令行工具都在 bin 文件夹中
├── conf/ # 配置文件
├── include/ # 本地方法接口相关头文件
├── jmods/ # Java 模块文件
├── legal/ # 许可及法律声明
├── lib/ # JDK 内部使用的文件
└── release # JDK 版本等信息二 、配置环境变量
部分 JDK 安装程序可能会自动配置。
-
JAVA_HOME:新建系统变量,值为 JDK 安装目录(例如
C:\Program Files\Java\jdk-25); -
Path:在 Path 中追加
%JAVA_HOME%\bin; -
CLASSPATH:一般无需手动配置。
配置完成后可以在命令行中使用 java -version 和 javac -version 验证:
三、安装 IntelliJ IDEA
对于 Java SE 和后端开发,推荐使用 IntelliJ IDEA,下载地址:
[Download IntelliJ IDEA]
https://www.jetbrains.com/idea/download/
按照安装程序的提示操作即可,可以在安装时选择让 IDEA 与 .java、.kt 等扩展名的文件相关联,之后打开 .java 等类型的文件可直接启动 IDEA。
1.4 - 第一个 Java 程序
在配置好 JDK 和 IntelliJ IDEA 后,就可以开始编写第一个 Java 程序。
这个部分会解决三个问题:
- 一个 Java 程序由哪些部分组成?
- Java 源代码是如何被编译和运行的?
- 如果分别通过命令行和 IDE 编译和运行一个 Java 程序?
1.4.1 - Java 程序的结构
这是一个最简单的 Java 程序,其功能实在控制台输出 “Hello, World!”:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}【第 1 行】 public class HelloWorld :
public(访问修饰符):告诉编辑器对该类的访问权限,也可以是private或protected;class(关键字):此关键字用于声明类,之后紧跟类的类名(HelloWorld)。类是 Java 程序组织代码的重要单位,可以包含变量、函数等成员。
【第 2 行】 public static void main(String[] args) :
static(关键字):声明该方法是静态方法(以后讲解);void(关键字):声明该方法不返回任何值,与 C 语言一致;main(方法名):main方法是传统 Java 应用程序的入口方法。启动程序时,会自动调用符合要求的main方法;String[] args(参数):用于接收命令行参数;
【第 3 行】 System.out.println("Hello, World!"); :
- 该语句调用标准输出流的方法,将指定的字符串输出到控制台,并换行;
println里的 ln 是 line 的缩写,所以是输出一行的意思;也存在一个print方法,唯一的区别是不会在末尾追加换行。
一个 Java 源文件的逻辑结构:
Java 源文件(.java)
│
├── package 声明(可选)
├── import 声明(可选)
│
└── 顶层类型声明
└── class HelloWorld
├── 字段(可选)
├── 构造器(可选)
└── 方法
└── main()
└── 可执行语句值得特别注意:
- Java 是大小写敏感的;
- 源文件名必须与类名相同(比如,例子中程序的源文件名必须为
HelloWorld.java)。
1.4.2 - 在命令行中编译并运行 Java 程序
一、编译并运行一个 Java 程序
Java 开发并不依赖 IntelliJ IDEA 等集成开发环境,我们之前提到:只要安装了 JDK,就可以使用文本编辑器编写 Java 源文件,然后通过命令行完成编译和运行。
-
编译 Java 源代码:在源文件所在目录打开 PowerShell 或 CMD,执行
javac [文件名]命令。$ javac HelloWorld.java -
若编译成功,通常不会输出任何信息,但目录中会增加一个
.class文件。这是是编译后的类文件,内部存储的是供 JVM 执行的字节码及相关元数据。D:\JavaStudy\HelloWorld\ ├── HelloWorld.java └── HelloWorld.class -
运行 Java 程序:编译成功后,在同一目录执行
java [类名]命令。$ javac HelloWorld.java $ java HelloWorld Hello, World! $
二、直接运行 Java 源文件
对于简单的程序,可以使用 java [文件名] 命令(例如 java HelloWorld.java),直接启动源文件形式的 Java 程序(但这并不意味着 Java 不再需要编译,而是 Java 启动器会在内部完成所需的编译和执行步骤)。
三、传递命令行参数
前面提到,main 方法中的 String[] args 用于接收命令行参数。这一机制与 C 语言中通过 main(int argc, char *argv[]) 接收命令行参数有相似之处,但 Java 直接提供了字符串数组,参数数量可以通过 args.length 获取。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, " + args[0]);
}
}编译并运行(在运行时传入一个参数 Duguiyu,它会作为一个字符串存储在 args[0] 中):
$ javac HelloWorld.java
$ java HelloWorld Duguiyu
Hello, Duguiyu
$1.4.3 - 在 IntelliJ IDEA 中编写 Java 程序
相较于手动执行 javac 和 java,IDEA 可以自动完成许多重复操作,但底层仍然需要使用 JDK 提供的编译与运行能力。
一、创建一个 Java 项目
打开 IntelliJ IDEA,在欢迎界面选择 New Project。IDEA 会自动识别已经安装好的 JDK,也提供直接下载和配置的选项。
二、IDEA 的项目结构
创建项目后,IDEA 会自动生成项目目录及配置文件,一个简单的项目可能具有如下结构:
HelloWorld/
├── .idea/ # IDEA 项目配置
├── src/ # 源代码目录
│ └── HelloWorld.java # Java 源代码
├── out/ # 编译输出目录(编译后出现)
└── HelloWorld.iml # 模块配置文件(视版本和设置)- Project(项目):是 IDEA 管理代码、模块、依赖、构建设置及运行配置的工作单位;
- Module(模块):是项目中的一个逻辑组织单位,可以具有自己的源代码目录、依赖及 SDK 配置。简单 Java 项目通常只需要一个模块;
- Source Root(源代码根目录):是用于存放源代码的目录,通常是
src,IDEA 会将其识别为 Java 源代码目录。src是常见的项目目录约定,不是 Java 语言强制要求的目录名称。
三、创建 Java 类
可以在 src 目录中,右键选择 New → Java Class 创建一个类,IDEA 会自动创建 .java 文件,包含类的基本结构。
public class HelloWorld {
}四、运行和调试程序
IDEA 中点击 Run,本质上相当于替开发者完成构建并启动 Java 程序的过程。
IDEA 一般会将编译生成的 .class 文件放在配置的输出目录(例如 out/production/HelloWorld/),而不一定与 .java 文件存放在一起。
除了直接运行,IDEA 还支持调试(Debugging)。调试是指在程序运行过程中暂停执行、检查变量、逐步执行语句,以定位程序错误的过程。
例如以下代码,可在第 6 行左侧单击左键,设置一个断电(Breakpoint),然后选择调试运行,程序在执行到断点时就会暂停,此时可以观察变量的值,并逐步执行程序。
public class HelloWorld {
public static void main(String[] args) {
int a = 10;
int b = 20;
int sum = a + b;
System.out.println(sum);
}
}1.5 - Java 代码规范
代码规范是指是指在编写程序时,开发者共同遵循的一系列命名、排版、注释和编码约定,目的是让程序更容易阅读、理解、维护和协作开发。
Java 并不存在一套所有项目都必须遵守的统一代码风格,目前值得参考的规范包括 Google Java Style Guide 以及 Oracle 的 Java 命名约定。
[Google Java Style Guide]
https://google.github.io/styleguide/javaguide.html