第2章 第一个 Java 程序:Hello World

发布时间:2026/8/19 22:59:33
第2章 第一个 Java 程序:Hello World 第2章 第一个 Java 程序Hello World上一节我们搭建好了开发环境并跑通了第一个程序。这一节逐行拆解 Hello World 程序理解 Java 程序的基本结构。一、完整代码publicclassHello{publicstaticvoidmain(String[]args){System.out.println(Hello, World!);}}这是 Java 最简单的程序一共 5 行却包含了 Java 最重要的几个语法元素。我们逐行分析。这段代码在 JDK 8、JDK 11、JDK 17 下运行结果完全一样本系列统一按这三个版本讲解后面遇到版本差异时会单独指出。二、逐行拆解1.public class Hellopublic访问修饰符表示公开的、可被外部访问class关键字用来定义一个类Hello类名Java 约定类名使用大驼峰命名法首字母大写类名必须与文件名一致大小写敏感。文件叫Hello.java类名就必须是Hello。2.public static void main(String[] args)这一行是程序入口。JVM 启动程序时会寻找并调用这个main方法publicJVM 需要从外部调用它所以必须公开static静态方法不依赖对象实例就能被调用void返回类型表示该方法不返回任何值main方法名固定的程序入口名String[] args参数接收命令行传入的参数javaHello 张三 李四上面的命令会把张三、李四作为两个元素放进args数组。写个例子验证一下publicclassArgsDemo{publicstaticvoidmain(String[]args){System.out.println(共收到 args.length 个参数);// for 循环逐个打印参数循环语法后面章节会详细讲for(Stringarg:args){System.out.println(arg);}}}# 运行java ArgsDemo 张三 李四# 输出# 共收到 2 个参数# 张三# 李四如果你用的是 JDK 11 或 JDK 17运行还有更省事的写法直接java Hello.javaJDK 会替你完成编译再运行省去先javac再java两步。这种单文件源码直接运行的写法从 JDK 11 才开始支持JDK 8 下只能先编译再运行。3.System.out.println(Hello, World!);SystemJDK 自带的系统类outSystem 类中的一个标准输出对象printlnout 的一个方法作用是打印一行内容后换行Hello, World!字符串字面量用双引号包裹分号;表示一条语句的结束。Java 中每行语句末尾都要写分号漏写会编译报错。println的参数也可以是变量和表达式还能用拼接字符串intage25;System.out.println(我今年 age 岁);// 输出我今年 25 岁三、另一个常用输出print 与 printfprintln打印后自动换行print不换行System.out.print(A);System.out.print(B);System.out.println(C);// 输出ABC然后换行printf支持格式化输出intage25;System.out.printf(我今年 %d 岁%n,age);// 输出我今年 25 岁常用占位符%d整数、%f小数、%s字符串、%n换行。四、注释注释不参与编译只给人看是良好代码习惯的必备部分// 单行注释以两个斜杠开头/* * 多行注释 * 可以写多行说明 *//** * 文档注释可用 javadoc 工具生成 API 文档 * author 作者 */文档注释还能用javadoc工具生成 API 文档HTMLJDK 自带的System、String官方文档就是这么生成的。常用标签/** * 计算两个整数的和 * param a 第一个加数 * param b 第二个加数 * return 两数之和 */publicstaticintadd(inta,intb){returnab;}param描述参数return描述返回值author写作者。五、代码书写规范重要类名大驼峰StudentInfo方法名、变量名小驼峰getName、studentAge常量全大写加下划线MAX_VALUE缩进统一用 4 个空格不要用 Tab大括号左半{放在行尾右半}单独成行规范不是语法强制但代码是写给人看的别人要读你的代码三个月后你也要读自己的代码。IDEA 里⌘⌥LmacOS/CtrlAltLWindows可以一键格式化。六、可能遇到的报错报错原因类 Hello 是公共的, 应在名为 Hello.java 的文件中声明类名与文件名不一致错误: 找不到或无法加载主类运行命令写错类名或没先编译; 应为漏写了分号七、扩展知识1. 为什么 main 必须是 public static void main(String[] args)这四个词一个都不能少各有各的道理publicJVM 从类外部调用它不是 public 会报Main method not publicstaticJVM 启动时还没创建对象main 必须静态才能不依赖对象调用voidmain 是程序入口返回值没有接收方所以返回类型是 voidString[] args命令行参数从这里传进程序。args名字可改String[]类型不能变——JVM 只认这个签名。2. 编译与运行的本质拆开看两步javac Hello.java检查语法通过后生成字节码Hello.classjava HelloJVM 加载字节码并逐条执行遇到System.out.println就调用操作系统 API 打印文字。Java 的编译产出的是字节码而非机器码不能直接在 CPU 上跑必须由 JVM 解释执行JVM 还会把热点代码用 JIT 编译成机器码提速——这就是一次编译、到处运行的根本原因。3. IDEA 里点运行按钮背后发生了什么IDEA 里点绿色三角形运行其实替我们做了手动的事自动调用javac编译输出到项目out目录相当于javac Hello.java调用java启动 JVM 运行主类相当于java Hello把输出显示在底部的 Run 窗口里。所以运行前要先保存⌘S否则运行的是旧版本。4. 注释规范JavadocJavadoc 是 Java 官方的文档注释规范配合javadoc工具使用javadoc-ddoc Hello.java# 在 doc 目录下生成 API 文档HTML生成后浏览器打开doc/index.html即可。日常建议类名上方写用途并标author方法上方用param、return说明参数和返回值。八、易错点1. 大小写写错// ❌ System 写成了 systemout 写成了 Outsystem.out.println(hi);System.Out.println(hi);// ✅ Java 严格区分大小写System.out.println(hi);2. main 拼成 mian// ❌ 拼写错误JVM 找不到入口运行时报找不到或无法加载主类publicstaticvoidmian(String[]args){}// ✅ main 是固定写法publicstaticvoidmain(String[]args){}3. 漏写分号// ❌ 语句末尾没有分号System.out.println(hi)// ✅ 每条语句以分号结束编译报错; 应为System.out.println(hi);4. main 方法少了 static// ❌ 编译能通过但运行时报错main 方法不是 static 的publicvoidmain(String[]args){}// ✅ static 不能省publicstaticvoidmain(String[]args){}5. 中文乱码编码问题// ❌ 源码用 GBK 保存编译器按 UTF-8 读取中文变成乱码System.out.println(你好);// ✅ 统一用 UTF-8 保存源码命令行编译时显式指定编码// javac -encoding UTF-8 Hello.javaWindows 记事本另存为时选UTF-8IDEA 默认就是 UTF-8 一般不会遇到但命令行手工编译时乱码很常见加-encoding UTF-8即可。九、小结Java 程序 类 main 方法main 是程序入口写法固定public static void main(String[] args)println打印换行print不换行printf格式化输出类名与文件名必须一致注释分三种单行、多行、文档注释Javadoc报错不可怕对照可能遇到的报错表格排查下一节开始学习变量与数据类型。下一篇第3章 变量与数据类型