1.编译错误
也叫语法错误,是指代码在编译阶段(代码未运行)就被编译器发现不符合编程语言的语法规则,导致编译器无法将你的源代码(如.java 文件)转换成可执行的字节码(.class 文件),这种错误编译器会提示位置。
具体的有
- 语法格式错误:少分号、括号不匹配、花括号未闭合等;
- 标识符错误:使用未定义的变量 / 方法、变量名拼写错误、关键字拼写错误(如
class写成Class); - 类型不匹配:例如把字符串赋值给整型变量(
int a = "12345";); - 访问修饰符 / 语法规则错误:例如在非静态方法外直接调用静态变量、方法参数列表格式错误等;
- 导入 / 依赖错误:使用了未导入的类(如用
ArrayList但没写import java.util.ArrayList;)。
public class CompileErrorExample {
public static void main(String[] args) {
// 错误1:变量声明后少了分号(语法格式错误)
int num = 1
// 错误2:使用了未定义的变量(标识符错误)
System.out.println(a);
//此时a为定义
// 错误3:关键字拼写错误
//(if写成了If)
If (条件) {
业务代码块
}
}
}
解决方法:读懂错误提示、定位错误位置、按类型修正,编译器是最好的 “纠错老师”;
2.运行错误
也叫运行时异常(RuntimeException),是指代码语法完全合法,能通过编译生成.class 文件,但在实际运行过程中,因为逻辑错误、数据异常或环境问题导致程序崩溃、卡死或输出错误结果。
具体的有
- 空指针异常:调用了
null对象的方法 / 属性(如null.length()) - 数组下标越界:访问数组时下标超出范围(如长度 3 的数组访问下标 3)
- 算术异常:除数为 0、取模运算除数为 0 等
- 类型转换异常:强制转换不兼容的类型(如
String str = (String) new Integer(10);) - 数字格式异常:字符串转数字失败(如
Integer.parseInt("abc"))
public class RuntimeErrorExample {
public static void main(String[] args) {
// 1. 编译通过:语法完全合法
int[] nums = {1, 2, 3, 4, 5};
// 2. 运行时错误1:数组下标越界(数组长度为3,下标最大为2,访问3超出范围)
System.out.println(nums[5]);
// 3. 运行时错误2:空指针异常(变量str为null,调用其length()方法)
String str = null;
System.out.println(str.length());
// 4. 运行时错误3:算术异常(除数为0)
int a = 100;
int b = 0;
System.out.println(a / b);
}
}
解决方法:
- 运行错误是 Java 程序编译通过但运行时因逻辑 / 数据问题触发的异常,由 JVM 检测并抛出;
- 常见的运行错误包括空指针、数组越界、除数为 0 等,核心是代码逻辑不符合运行时的实际情况;
- 排查运行错误的关键是解读异常堆栈定位错误行,通过打印变量或调试工具分析数据 / 逻辑问题。
3.逻辑错误
是指代码语法完全合法(能通过编译)、运行时不抛出任何异常(程序不崩溃),但最终输出的结果不符合你的预期。
具体的有
1.计算错误(最常见):例如漏掉最后一项
2.条件判断错误:访问数组时下标超出范围(如长度 3 的数组访问下标 3)
3.赋值错误:除数为 0、取模运算除数为 0 等
public class LogicalErrorExample1 {
public static void main(String[] args) {
//1.计算错误
int sum = 0;
// 逻辑错误:循环条件写成i < 10(少加了10),预期i <= 10
for (int i = 1; i < 10; i++) {
sum += i;
}
// 输出结果:45(预期55),程序无报错但结果错误
System.out.println("1-10累加和:" + sum);
//2.条件错误
int num = 4;
// 逻辑错误:条件写成num % 2 != 0(判断奇数),预期num % 2 == 0
if (num % 2 != 0) {
System.out.println(num + "是偶数");
} else {
System.out.println(num + "是奇数");
}
// 输出结果:4是奇数(预期4是偶数),程序无报错但逻辑错误
}
//3.赋值错误
int a = 10;
int b = 20;
// 逻辑错误:先把a的值赋给b,导致b的原始值丢失,后续交换失败
b = a;
a = b;
// 输出结果:a=10, b=10(预期a=20, b=10)
System.out.println("a=" + a + ", b=" + b);
}
解决方法:
- 逻辑错误是 Java 程序编译、运行都正常,但结果不符合预期的错误,是三类错误中最隐蔽、最难排查的;
- 常见的逻辑错误包括循环条件错误、判断条件写反、变量赋值顺序错误等,核心是 “思路和代码逻辑不匹配”;
- 排查逻辑错误的核心方法是:打印关键变量观察值、用 IDE 调试逐行验证、编写单元测试验证结果。
4.链接错误
是介于编译错误和运行错误之间的一类特殊错误,需要理解它的定义、触发场景、常见类型以及和其他错误的区别,这是深入理解 Java 程序运行机制的重要知识点。
核心特征:
- 编译无错误:代码语法合规,
javac编译时不会报错,能生成.class 文件; - 发生在类加载 / 链接阶段:要么程序启动时就报错,要么运行到首次使用某个类时才报错;
- 属于 Error 而非 Exception:链接错误通常是严重的系统级问题(如依赖库版本冲突),而非业务逻辑问题,JVM 一般无法恢复;
- 根源是类依赖关系破坏:不是代码语法 / 逻辑问题,而是类之间的 “协作关系” 出问题。

被折叠的 条评论
为什么被折叠?



