第2章 第一个 Java 程序:Hello World
2026/8/19 22:58:58 网站建设 项目流程

第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 Hello

  • public:访问修饰符,表示公开的、可被外部访问
  • class:关键字,用来定义一个类
  • Hello:类名,Java 约定类名使用大驼峰命名法(首字母大写)

类名必须与文件名一致(大小写敏感)。文件叫Hello.java,类名就必须是Hello

2.public static void main(String[] args)

这一行是程序入口。JVM 启动程序时,会寻找并调用这个main方法:

  • public:JVM 需要从外部调用它,所以必须公开
  • 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.java,JDK 会替你完成编译再运行,省去先javacjava两步。这种"单文件源码直接运行"的写法从 JDK 11 才开始支持,JDK 8 下只能先编译再运行。

3.System.out.println("Hello, World!");

  • System:JDK 自带的系统类
  • out:System 类中的一个标准输出对象
  • println:out 的一个方法,作用是打印一行内容后换行
  • "Hello, World!":字符串字面量,用双引号包裹

分号;表示一条语句的结束。Java 中每行语句末尾都要写分号,漏写会编译报错。

println的参数也可以是变量和表达式,还能用+拼接字符串:

intage=25;System.out.println("我今年 "+age+" 岁");// 输出:我今年 25 岁

三、另一个常用输出:print 与 printf

println打印后自动换行,print不换行:

System.out.print("A");System.out.print("B");System.out.println("C");// 输出:ABC(然后换行)

printf支持格式化输出:

intage=25;System.out.printf("我今年 %d 岁%n",age);// 输出:我今年 25 岁

常用占位符:%d整数、%f小数、%s字符串、%n换行。

四、注释

注释不参与编译,只给人看,是良好代码习惯的必备部分:

// 单行注释:以两个斜杠开头/* * 多行注释: * 可以写多行说明 *//** * 文档注释:可用 javadoc 工具生成 API 文档 * @author 作者 */

文档注释还能用javadoc工具生成 API 文档(HTML),JDK 自带的SystemString官方文档就是这么生成的。常用标签:

/** * 计算两个整数的和 * @param a 第一个加数 * @param b 第二个加数 * @return 两数之和 */publicstaticintadd(inta,intb){returna+b;}

@param描述参数,@return描述返回值,@author写作者。

五、代码书写规范(重要)

  • 类名大驼峰:StudentInfo
  • 方法名、变量名小驼峰:getNamestudentAge
  • 常量全大写加下划线:MAX_VALUE
  • 缩进统一用 4 个空格,不要用 Tab
  • 大括号左半{放在行尾,右半}单独成行

规范不是语法强制,但代码是写给人看的:别人要读你的代码,三个月后你也要读自己的代码。IDEA 里⌘⌥L(macOS)/Ctrl+Alt+L(Windows)可以一键格式化。

六、可能遇到的报错

报错原因
类 Hello 是公共的, 应在名为 Hello.java 的文件中声明类名与文件名不一致
错误: 找不到或无法加载主类运行命令写错类名,或没先编译
';' 应为漏写了分号

七、扩展知识

1. 为什么 main 必须是 public static void main(String[] args)

这四个词一个都不能少,各有各的道理:

  • public:JVM 从类外部调用它,不是 public 会报Main method not public
  • static:JVM 启动时还没创建对象,main 必须静态才能不依赖对象调用;
  • void:main 是程序入口,返回值没有接收方,所以返回类型是 void;
  • String[] args:命令行参数从这里传进程序。args名字可改,String[]类型不能变——JVM 只认这个签名。

2. 编译与运行的本质

拆开看两步:

  1. javac Hello.java:检查语法,通过后生成字节码Hello.class
  2. java Hello:JVM 加载字节码并逐条执行,遇到System.out.println就调用操作系统 API 打印文字。

Java 的"编译"产出的是字节码而非机器码,不能直接在 CPU 上跑,必须由 JVM 解释执行,JVM 还会把热点代码用 JIT 编译成机器码提速——这就是"一次编译、到处运行"的根本原因。

3. IDEA 里点运行按钮,背后发生了什么

IDEA 里点绿色三角形运行,其实替我们做了手动的事:

  1. 自动调用javac编译,输出到项目out目录(相当于javac Hello.java);
  2. 调用java启动 JVM 运行主类(相当于java Hello);
  3. 把输出显示在底部的 Run 窗口里。

所以运行前要先保存(⌘S),否则运行的是旧版本。

4. 注释规范:Javadoc

Javadoc 是 Java 官方的文档注释规范,配合javadoc工具使用:

javadoc-ddoc Hello.java# 在 doc 目录下生成 API 文档(HTML)

生成后浏览器打开doc/index.html即可。日常建议:类名上方写用途并标@author;方法上方用@param@return说明参数和返回值。

八、易错点

1. 大小写写错

// ❌ System 写成了 system,out 写成了 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.java

Windows 记事本另存为时选"UTF-8";IDEA 默认就是 UTF-8 一般不会遇到,但命令行手工编译时乱码很常见,加-encoding UTF-8即可。

九、小结

  • Java 程序 = 类 + main 方法
  • main 是程序入口,写法固定:public static void main(String[] args)
  • println打印换行,print不换行,printf格式化输出
  • 类名与文件名必须一致
  • 注释分三种:单行、多行、文档注释(Javadoc)
  • 报错不可怕:对照"可能遇到的报错"表格排查

下一节开始学习变量与数据类型。

下一篇:第3章 变量与数据类型

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询