java控制台程序入口必须是public static void main(string[] args),编译运行需正确使用命令行和类路径,scanner输入需注意换行符陷阱,退出应优先自然结束而非system.exit(0)。

main 方法必须是 public static void 的入口
Java 控制台程序的启动点只能是名为 main 的静态方法,且签名必须严格匹配:public static void main(String[] args)。少一个修饰符(比如漏掉 static)或改了返回类型(比如写成 int),JVM 就找不到入口,运行时会报错:Error: Main method not found。
常见错误包括:
- 把
main写在非public类里,而类名又和文件名不一致(Java 要求public类名必须与文件名相同) - 参数类型写成
String args[]虽然语法合法,但建议统一用String[] args风格,避免团队协作时歧义 - 在 IDE 中右键运行却选错了类(尤其项目里有多个含
main的类),导致运行了旧代码
用 Scanner 读取用户输入时注意 nextLine() 的陷阱
Scanner 是最常用的控制台输入工具,但它对换行符的处理容易出问题。比如先调用 nextInt() 读数字,再调用 nextLine() 读字符串,后者会直接返回空字符串——因为 nextInt() 不消费结尾的换行符,nextLine() 立刻读到它就结束了。
解决办法很简单:
立即学习“Java免费学习笔记(深入)”;
- 统一用
nextLine()读所有输入,然后手动解析类型,例如:Integer.parseInt(scanner.nextLine()) - 或者在
nextInt()后加一句scanner.nextLine()消耗掉残留换行符 - 别用
next()读带空格的输入,它只取第一个单词;需要整行就一定用nextLine()
编译和运行必须用命令行配合正确的类路径
写完 HelloWorld.java 后,不能双击运行,必须通过终端操作。关键不是“能不能跑”,而是“在哪跑、以谁为起点”:
- 确保当前目录是
.java文件所在目录,否则javac找不到源文件 - 编译命令是
javac HelloWorld.java,生成HelloWorld.class;注意大小写,Windows 下不敏感但 Linux/macOS 敏感 - 运行命令是
java HelloWorld(不加.class后缀!),且要求当前目录包含该 class 文件;如果类在包里(如com.example.App),就得进到包的父目录,用java com.example.App - 若依赖外部 jar,得用
-cp指定,例如:java -cp ".:lib/commons-cli.jar" MyApp(Linux/macOS)或java -cp ".;lib\commons-cli.jar" MyApp(Windows)
退出程序别用 System.exit(0) 除非真有必要
很多新手一看到“退出”就立刻写 System.exit(0),其实绝大多数时候完全不需要。只要 main 方法自然执行完毕,JVM 就会干净退出。滥用 System.exit() 会导致:
- 资源清理失败(比如
finally块或 shutdown hook 不执行) - 在单元测试或嵌入式环境中被拦截,造成测试失败
- 掩盖逻辑缺陷——本该靠条件分支结束流程,却靠强制退出绕过去
真正该用的场景极少:比如解析命令行参数失败后立即终止,且确定无后续清理工作;或者响应某个特殊信号(如 Ctrl+C)需快速退出。其他时候,用 return 或自然结束更安全。
控制台程序的复杂度往往不在语法,而在输入/输出流的状态管理、类路径组织和退出时机判断——这些地方出错,比写错 for 循环更难定位。










