新手写 Java 代码必踩的 8 个坑:编译器报的错,90% 都是这几句话

新手写 Java 代码必踩的 8 个坑:编译器报的错,90% 都是这几句话
写在前面:上一篇讲了怎么装 JDK,评论区有人说装完了,结果第一行 System.out.println("hello") 就报错。我太懂这种感觉了 —— 不是你不会写,是 Java 这门语言对新手的 "规矩" 特别多,而且它不会好好告诉你哪错了。这篇就把我当年第一个月踩过的坑一次讲完。
一、大小写:Java 是真的较真
这是新手第一个要挨的耳光。
java
运行
system.out.println("hello"); // ❌ 报错
System.out.println("hello"); // ✅ 正确
记住这几个必错的:
System 大写 S,不是 system
String 大写 S,不是 string
public class 全小写,别写成 Public
main 全小写,别写成 Main
System.out.println 里的 out 小写,println 全小写(不是 Println)
编译器报的错大概率长这样:
plaintext
错误: 找不到符号
system.out.println("hello");
^
符号: 变量 system
位置: 类 Hello
看到 "找不到符号",第一反应就去查大小写,十次有八次是这个。
二、main 方法:一个字母都不能错
很多新手写 hello world,抄都能抄错:
java
运行
public static void main(String[] args) {
System.out.println("hello");
}
这一整串是死的,一个字符都别改:
public 不能少
static 不能少
void 不能少
main 不能写成 Main 或 mainn
String[] args 不能写成 string args[](虽然语法上数组写法有变化,但新手就照这个抄)
括号、中括号都是英文的
少写一个 static,运行时你会看到:
plaintext
错误: 找不到或无法加载主类 Hello
原因: java.lang.NoSuchMethodError: main
别慌,回去对照着一个字母一个字母检查 main 那一行。
三、标点符号:中文输入法是万恶之源
这个坑我能笑一年。
java
运行
System.out.println("hello"); // ❌ 末尾是中文分号
System.out.println("hello"); // ✅ 英文分号
java
运行
System.out.println("hello"); // ❌ 中文括号
System.out.println("hello"); // ✅ 英文括号
java
运行
System.out.println(‘hello’); // ❌ 中文单引号
System.out.println("hello"); // ✅ 英文双引号
只要你报错信息里出现 "需要 ';'"" 需要 <>" 这种莫名其妙的话,立刻切换英文输入法重新打一遍那行,别盯着代码看半小时。
给新手的建议:写代码的时候把输入法切成英文,写完注释再切回来。
四、文件名必须和 public 类名一模一样
java
运行
// 文件名叫 Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("hello");
}
}
注意三件事:
文件必须叫 Hello.java,首字母大写,和 public class 后面的 Hello 完全一致
大小写敏感,hello.java 和 Hello.java 是两个文件
如果类前面没有 public,文件名就可以随便起(但新手别搞这个花活,老老实实地对应上)
文件名对不上,javac 编译能过,但 java Hello 运行时必报 "找不到或无法加载主类"。
五、变量:没声明、没初始化、类型乱套
新手写代码最爱犯这几种:
5.1 变量没声明就用
java
运行
public static void main(String[] args) {
age = 18; // ❌ 报错:找不到符号
int age = 18; // ✅ 先声明类型
}
5.2 没初始化就用
java
运行
int a;
System.out.println(a); // ❌ 报错:可能尚未初始化变量 a

int a = 0; // ✅ 给个初始值
5.3 类型不匹配
java
运行
int a = 10;
a = "hello"; // ❌ int 不能存字符串

int b = 3.14; // ❌ 小数点后面不能直接赋给 int
double b = 3.14; // ✅
记住:Java 是强类型语言,每个变量出生的时候就得说清楚自己是什么类型,以后不能随便变。
六、字符串比较:== 和 equals 的坑
这个坑能让新手怀疑人生三个月。
java
运行
String a = new String("hello");
String b = new String("hello");

System.out.println(a == b); // false ⚠️
System.out.println(a.equals(b)); // true ✅
为什么?因为 == 比较的是内存地址,不是内容。两个 "hello" 内容一样,但在内存里是两个对象。
新手记住一句话:比较字符串内容,永远用 .equals(),别用 ==。
java
运行
if (name.equals("admin")) { ... }
反过来,如果常量在前面,还能避免空指针:
java
运行
if ("admin".equals(name)) { ... } // 推荐写法
七、常见异常对照表
表格
报错信息 中文意思 常见原因 怎么办
NullPointerException 空指针 调用了 null 对象的方法 / 属性 在使用前判空:if (str != null)
ArrayIndexOutOfBoundsException 数组下标越界 数组只有 3 个元素,你取了 arr[3] 或 arr[5] 记住数组下标从 0 开始,长度 n 的合法下标是 0 ~ n-1
ClassNotFoundException 找不到类 类名写错、包名错、jar 包没导 检查类名大小写、包名是否和目录一致
NoSuchMethodError 找不到方法 main 写错、调用了不存在的方法 对照 main 方法的固定写法
需要';' 缺分号 上一行没写分号,或者用了中文分号 往上一行看,换英文分号
无法将类 X 中的构造器 X 应用到给定类型 构造参数不对 new 的时候传的参数个数 / 类型不对 看类的构造方法要求什么参数
看到红色别慌,先看第一行报错,把第一行那句英文翻译成中文,问题基本就定位了。
八、中文乱码:控制台和 IDE 都在跟你作对
8.1 控制台乱码
你写:
java
运行
System.out.println("你好世界");
cmd 里输出:浣犲ソ涓栫晫
原因:Windows cmd 默认 GBK 编码,而你的文件保存成了 UTF-8。
解决办法(任选一个):
cmd 里先敲一句 chcp 65001 再运行
IDEA:File → Settings → Editor → File Encodings,全部改成 UTF-8
编译时指定编码:javac -encoding UTF-8 Hello.java
8.2 IDEA 里乱码
IDEA 右下角看一眼编码,是不是 GBK?点一下切成 UTF-8,reload 一下文件就好。
写在最后
新手写 Java,前两个月基本就是在做三件事:
对着报错查单词—— 把英文报错翻译成中文;
对照模板抄结构——main 方法、类、包,先抄对再说;
把中文输入法切成英文—— 这个习惯比学任何语法都重要。
给你几个马上能做的建议:
报错第一眼看第一行,别滚到最底下看一大堆堆栈
写代码先把 IDE 的自动补全打开,别手敲类名
每写完一小段就运行一次,别写完 100 行才发现全是错
System.out.println 是你最好的朋友,怀疑哪一步就打印出来看
Java 是门规矩很多的语言,但规矩多意味着报错信息是准的—— 它说哪行错,你就去看哪行,十有八九真在那。
希望这篇能帮你少点几次百度。评论区贴你的报错,我来帮你看。

posted @ 2026-09-13 15:56  ning0219  阅读(5)  评论(0)    收藏  举报