1. 了解 Java
Java 是什么
Java 是一门编程语言。我们可以用它编写后端服务、桌面程序、工具软件等。
Java 程序通常不会直接运行源代码,而是分成两步:
Java 源代码(.java) ↓ 编译 Java 字节码(.class) ↓ 交给 JVM 执行 程序运行Java 的一个重要特点是跨平台。同一份 Java 字节码,通常可以在 Windows、macOS 和 Linux 上运行,前提是系统中安装了合适的 Java 运行环境。
这就是常说的:
一次编译,到处运行。
当然,不同系统的文件路径、字符集等仍然可能存在差异。“跨平台”不代表完全不需要考虑操作系统。
Java 适合做什么
Java 常用于:
- Web 后端和企业应用
- 微服务和分布式系统
- Android 相关开发
- 大数据相关项目
- 桌面程序和各种工具
对于初学者来说,学习 Java 还能帮助我们理解变量、流程控制、面向对象、异常处理等常见编程概念。
Java SE 和 Jakarta EE
Java SE
Java SE 是 Java 的标准版,也是学习 Java 的基础。
它包含:
- Java 基础语法
- 面向对象
- 字符串和数组
- 集合
- 文件读写
- 网络编程
- 多线程等基础功能
我们目前学习的内容属于 Java SE。
Jakarta EE
Jakarta EE 以前叫 Java EE,主要用于开发大型 Web 应用和企业应用。
初学阶段不需要深入了解它。先学好 Java SE,之后再学习 Spring、Spring Boot 或 Jakarta EE 会更容易。
2. Hello World
我使用的是集成开发环境 IDEA。
先创建一个名为HelloWorld.java的文件:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }运行后会输出:
Hello world!程序结构
先简单认识这段代码:
public class HelloWorld {这里声明了一个名为HelloWorld的类。
可以暂时把类理解成程序的一个组成部分。Java 代码通常写在类里面。
public static void main(String[] args) {这是main方法,也就是程序的入口。运行这个程序时,Java 会从这里开始执行。
现阶段可以先记住它的固定写法,后面学到方法、数组和static时,再分别理解其中每个部分。
System.out.println("Hello world!");这条语句会把内容输出到控制台。
Java 中的大多数语句以分号;结尾。
类名和文件名
如果一个顶层类使用了public修饰,文件名必须和类名一致,并注意大小写。
例如:
public class HelloWorld { }文件名必须是:
HelloWorld.java一个源文件中最多只能有一个public顶层类,但可以有其他不使用public修饰的类:
public class HelloWorld { } class Test { }初学阶段建议一个源文件只写一个类,这样更容易管理。
main 方法中的 args
args用于接收命令行参数。它只是一个变量名,可以换成其他名字,不过一般都按照习惯写成args。
例如:
java HelloWorld Java Study此时:
args[0] // "Java" args[1] // "Study"暂时不使用命令行参数也没关系。
IDEA 中的快捷写法
IntelliJ IDEA 提供了一些代码模板:
- 输入
main或psvm,可以快速生成main方法 - 输入
sout,可以快速生成输出语句
这些是 IDEA 提供的快捷功能,不属于 Java 语法。
不使用 IDE 编译和运行
先检查 JDK 是否已经安装:
java -version javac -version然后进入HelloWorld.java所在的目录。
编译源文件:
javac HelloWorld.java如果代码没有错误,当前目录会出现:
HelloWorld.class HelloWorld.java运行程序:
java HelloWorld注意,运行时写类名即可,不要写成:
java HelloWorld.class.java和.class
.java文件保存我们编写的 Java 源代码.class文件保存编译后得到的 Java 字节码- JVM 负责加载和执行字节码
.class文件不是操作系统可以直接运行的程序,它需要交给 JVM 执行。
JDK、JVM 和 JRE
这几个名称很容易混淆,初学阶段可以这样理解:
JDK(Java Development Kit)
JDK 是 Java 开发工具包。编写和运行 Java 程序通常都需要安装它。
JDK 中包含:
javac:编译 Java 源文件java:启动 Java 程序- 调试、打包等开发工具
- 运行 Java 程序所需的组件
JVM(Java Virtual Machine)
JVM 是 Java 虚拟机,负责加载和执行.class字节码文件。
Java 能够跨平台,很大程度上是因为不同操作系统都有对应的 JVM。
JRE(Java Runtime Environment)
JRE 是 Java 运行环境,主要用于运行 Java 程序。
过去,JDK 和 JRE 经常作为两个独立概念介绍。现代 Java 通常直接安装 JDK即可,不需要再单独安装 JRE。
可以先简单记成:
JDK:开发和运行 Java 程序 JVM:实际执行 Java 字节码 JRE:运行 Java 程序所需的环境一个源文件可能生成多个 class 文件
如果一个源文件中有多个类,编译后就可能出现多个.class文件:
public class HelloWorld { } class Test { }编译后可能得到:
HelloWorld.class Test.class内部类等语法也可能生成额外的.class文件。因此,一个.java文件不一定只生成一个.class文件。
IDEA 把 class 文件放在哪里
使用 IDEA 运行程序时,它也会先编译代码,只是这个过程由 IDE 自动完成了。
编译结果可能位于:
out/production如果项目使用 Maven 或 Gradle,也可能位于其他目录。具体位置取决于项目配置。
3. 注释、标识符和关键字
注释
注释是写给人看的说明,编译器通常会忽略它们。
Java 中常见的注释有三种。
行注释
//后面这一行的内容是注释:
// 输出一段文字 System.out.println("Hello");块注释
块注释可以占用多行:
/* 这里是块注释 可以写多行内容 */块注释不能互相嵌套。
文档注释
文档注释使用/** ... */,通常写在类、方法或字段前面:
/** * 程序入口。 * * @param args 命令行参数 */ public static void main(String[] args) { System.out.println("Hello world!"); }文档注释可以通过 Javadoc 工具生成程序说明文档。
完整示例:
public class HelloWorld { /** * 程序入口。 * * @param args 命令行参数 */ public static void main(String[] args) { System.out.println("Hello world!"); // System.out.println("这行代码不会执行"); /* System.out.println("这两行代码"); System.out.println("也不会执行"); */ } }注释应该解释代码为什么这样写,而不是重复代码本身已经表达清楚的内容。
标识符
类名、方法名和变量名都属于标识符。
例如:
int age = 18;其中:
int是关键字age是变量名,也是标识符18是整数值
标识符需要遵守以下规则:
- 可以包含字母、数字、下划线
_和美元符号$ - 不能以数字开头
- 不能使用 Java 关键字
- 不能使用
true、false和null - 区分大小写
例如:
int age; // 合法 int userAge; // 合法 int _count; // 合法 int 2users; // 不合法,不能以数字开头 int class; // 不合法,class 是关键字Java 允许在标识符中使用中文,但实际项目通常使用英文。
虽然$可以出现在标识符中,但普通代码中很少主动使用。
命名风格
除了语法规则,Java 还有一些常见的命名习惯:
| 类型 | 命名方式 | 示例 |
|---|---|---|
| 类名 | 大驼峰 | HelloWorld、UserService |
| 方法名 | 小驼峰 | getName、printMessage |
| 变量名 | 小驼峰 | userName、studentAge |
| 常量 | 大写字母和下划线 | MAX_SIZE |
| 包名 | 全小写 | com.example.demo |
这些不是编译器强制要求的,但遵守统一的命名习惯可以让代码更容易阅读。
关键字
关键字是 Java 预先规定的、具有特殊含义的单词。例如:
public class HelloWorld { private int age; }其中,public、class、private和int都是关键字。
关键字区分大小写,不能作为类名、方法名或变量名。
初学阶段先认识下面这些常用关键字即可:
| 类别 | 常见关键字 | 作用 |
|---|---|---|
| 定义类型 | class、interface、enum | 定义类、接口和枚举 |
| 访问控制 | public、protected、private | 控制访问范围 |
| 数据类型 | int、long、double、char、boolean | 表示基本数据类型 |
| 条件判断 | if、else、switch、case | 根据条件执行代码 |
| 循环 | for、while、do | 重复执行代码 |
| 跳转 | break、continue、return | 改变代码执行流程 |
| 对象 | new、this、super | 创建或访问对象 |
| 继承 | extends、implements | 表示继承或实现 |
| 异常 | try、catch、finally、throw、throws | 处理异常 |
| 常用修饰符 | static、final、abstract | 修饰类、方法或变量 |
| 包 | package、import | 声明包和导入类型 |
这里有几个容易混淆的地方。
不写访问修饰符
Java 中没有名为default的“默认访问修饰符”。
如果类或成员前面没有写public、protected或private,它通常只能被同一个包中的代码访问,这叫包级访问权限。
default关键字本身主要用于switch和接口默认方法。
final
final用在不同位置时,含义也不同:
- 修饰变量:变量不能再次赋值
- 修饰方法:方法不能被子类重写
- 修饰类:类不能被继承
初学阶段先记住“受到限制,不能再改变”即可,具体规则后面再学。
void
void表示方法没有返回值:
public static void printMessage() { System.out.println("Hello"); }它不是基本数据类型。
基本数据类型
Java 有 8 种基本数据类型:
| 类型 | 简单说明 |
|---|---|
byte | 较小的整数 |
short | 短整数 |
int | 常用整数 |
long | 较大的整数 |
float | 单精度小数 |
double | 常用小数 |
char | 单个字符 |
boolean | true或false |
具体取值范围和使用方法会在变量与数据类型部分继续学习。
保留字和字面量
const和goto是 Java 的保留字,目前没有实际用途,但也不能用作标识符。
从 Java 9 开始,单独的下划线_也不能作为标识符:
int _ = 1; // 不合法下面三个词不是关键字,而是字面量:
| 字面量 | 含义 |
|---|---|
true | 布尔值真 |
false | 布尔值假 |
null | 空引用值 |
初学阶段不需要背下所有关键字。随着后面的学习不断接触,记忆会比一次性背表格更牢固。
Java 文档
学习时应尽量使用与 JDK 版本对应的文档。
例如,使用 JDK 21 时,可以查阅:
https://docs.oracle.com/en/java/javase/21/docs/api/API 文档更像一本字典,不需要从头阅读。遇到不熟悉的类或方法时再查询即可。