java helloworld需过编译、类路径、主方法签名三关:文件名须与public类名严格一致;public类不可在package中或须匹配目录结构;javac/java需同目录执行且清理旧.class;main方法必须为public static void main(string[] args);中文乱码源于编码不一致,应统一为utf-8。

Java 的 HelloWorld 不是“写出来就行”,而是要过编译、类路径、主方法签名三关——缺一不可,否则连错误提示都看不懂。
为什么 javac HelloWorld.java 报错“找不到符号”或“类文件不存在”
常见错误现象:明明写了 public class HelloWorld,但运行 javac 后没生成 HelloWorld.class,或者运行 java HelloWorld 时提示 Could not find or load main class HelloWorld。
- Java 要求源文件名必须和
public类名完全一致(包括大小写),文件必须叫HelloWorld.java,不能是helloworld.java或HelloWorld_Java.java - 如果类声明为
public class HelloWorld,它就不能在包(package)里——要么删掉package行,要么把文件放到对应目录结构中(比如package com.example;就得放在com/example/HelloWorld.java) -
javac和java命令必须在同一个目录下执行,且当前目录不能有残留的旧.class文件干扰(建议先rm *.class再重试)
public static void main(String[] args) 少一个词就直接不认
这是 JVM 启动程序的唯一入口签名,任何改动都会导致“没有主方法”错误。不是语法错,是契约失效。
-
public缺失 → JVM 无法访问该方法 -
static缺失 → JVM 无法在不实例化类的情况下调用它 -
void改成int或其他类型 → 编译失败(JVM 只接受void) -
String[] args写成String args[]可以,但写成string[] args(小写 s)或String[] a(参数名错)不影响编译,只是习惯问题;真正致命的是漏掉args或类型写成string
用 System.out.println() 输出中文却显示乱码?
不是代码问题,是终端/控制台编码和 Java 源文件编码不一致导致的。Windows CMD 默认是 GBK,而多数编辑器(VS Code、IDEA)默认保存为 UTF-8。
立即学习“Java免费学习笔记(深入)”;
- 最稳方案:用命令行指定编码编译和运行:
javac -encoding UTF-8 HelloWorld.java,再java HelloWorld - 如果坚持在 CMD 运行,可临时改终端编码:
chcp 65001(切换到 UTF-8),但需确保源文件确实是 UTF-8 无 BOM - 避免用记事本保存 Java 源文件——它默认存为 ANSI(GBK),极易出乱码
最容易被忽略的其实是工作目录和文件名大小写的耦合关系:Linux/macOS 下 helloworld.java 和 HelloWorld.java 是两个文件,但 Windows 虽不区分,javac 仍严格按类名找文件。别让“好像能跑”掩盖了路径逻辑的脆弱性。










