第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章 变量与数据类型

相关新闻

树莓派5 USB-C一线连:GPIO智能控制与USB Gadget模式深度配置

树莓派5 USB-C一线连:GPIO智能控制与USB Gadget模式深度配置

1. 项目概述:当USB-C接口遇上树莓派5的GPIO 最近折腾树莓派5,发现一个挺有意思的玩法:通过USB-C接口,不仅能给它供电,还能让它和电脑之间共享网络、文件,甚至实现一些更深度的交互。这听起来是不是有点像把…

2026/8/19 22:59:10 阅读更多 →
C++ 基础语法与指针引用详解

C++ 基础语法与指针引用详解

1. 引用与函数副作用在 C 中,引用(Reference)为变量创建了一个别名,通过引用传递参数可以实现函数对外部变量的修改,这就是函数的副作用。//void Swap(int &a, int &b)//函数的副作用(会修改外部变量) //{ // …

2026/8/19 22:58:09 阅读更多 →
AI科研智能体:从论文解析到实验复现的自动化实践

AI科研智能体:从论文解析到实验复现的自动化实践

这次我们来看一个名为“Training AI Scientists to Replicate Research”的项目。从标题就能看出,它的核心目标不是生成图片或语音,而是训练AI智能体去复现科学研究。这听起来有点科幻,但背后指向的是当前AI研究的一个前沿方向:让…

2026/8/19 22:58:09 阅读更多 →

最新新闻

MA-VLCM:多模态融合如何革新多智能体策略价值评估

MA-VLCM:多模态融合如何革新多智能体策略价值评估

1. 从单智能体到多智能体:价值评估的范式转变在强化学习领域,评估一个策略的好坏,或者说预测一个状态或状态-动作对的长期回报,是核心任务之一。传统的价值函数,无论是状态价值函数V(s)还是动作价值函数Q(s, a)&#x…

2026/8/21 9:03:49 阅读更多 →
网络安全实战:漏洞扫描器对比——Nessus、OpenVAS、Nuclei 实战评测

网络安全实战:漏洞扫描器对比——Nessus、OpenVAS、Nuclei 实战评测

前言:在自动化的浪潮中寻找那把“尺子” 在渗透测试的项目周期里,有一个环节既让人爱,又让人恨,那就是“漏洞扫描”。爱它,是因为它确实能像收割机一样,快速收割掉那些低垂的果实——那些未打补丁的系统、弱…

2026/8/21 9:03:49 阅读更多 →
冒泡排序算法深度解析:从基础实现到优化策略与面试实战

冒泡排序算法深度解析:从基础实现到优化策略与面试实战

1. 项目概述:为什么我们还在聊冒泡排序?在算法面试和日常的编程基础讨论里,冒泡排序(Bubble Sort)大概是那个最常被提起,也最容易被“轻视”的算法。很多刚入门的朋友会觉得:“这不就是个两层循…

2026/8/21 9:03:49 阅读更多 →
开源Winapp2.ini规则库:打造精准免费的Windows系统清理方案

开源Winapp2.ini规则库:打造精准免费的Windows系统清理方案

在 Windows 系统长期使用后,系统盘空间被各种临时文件、缓存和软件残留占用是开发者和管理员经常遇到的痛点。手动清理不仅效率低下,而且容易误删重要文件。虽然市面上有 CCleaner 等知名工具,但其商业版本需要付费,且部分高级功能…

2026/8/21 9:03:49 阅读更多 →
ORB-SLAM3 MLPnPsolver::Refine()

ORB-SLAM3 MLPnPsolver::Refine()

下面是 MLPnPsolver::Refine() 函数的逐行注释,以及背后数学原理与公式说明。 首先理解函数的作用:在RANSAC过程中,当找到一个比较好的模型(内点数超过历史最佳),会用所有内点重新估计一次位姿,以得到更精确的解。这个过程通常叫做“局部优化”或“Refine”。这里用的是…

2026/8/21 9:03:49 阅读更多 →
独立游戏开发中AI工具合规应用与风险规避指南

独立游戏开发中AI工具合规应用与风险规避指南

最近和几个做独立游戏的朋友聊天,发现一个挺有意思的现象:大家聊起AI工具时,态度变得比以前复杂多了。以前是“哪个AI画图强?”“哪个AI写代码快?”,现在更多是“这个AI生成的内容,平台审核能过…

2026/8/21 9:02:49 阅读更多 →

日新闻

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

前言随着国家数字基础设施信创替代、关键技术自主可控战略持续深化,口岸智慧安防、边检智能管控领域正全面进入国产化、自主化、安全可控升级周期。当前国内机场边检旅客识别与定位体系长期依赖国外商用视觉算法、进口成像硬件、闭源通用计算平台,存在核…

2026/8/21 0:00:42 阅读更多 →
别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱当下数字化建设浪潮中,很多项目将三维可视化、视频贴图叠加的数字孪生等同于空间智能。传统数字孪生更多停留在三维场景复刻,擅长把物理世界“画出来、展示出来”,…

2026/8/21 0:00:42 阅读更多 →
105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40C到85C的影像质量一致性——ISP参数温漂补偿与产线标定策略 去年冬天在北方某车厂做A样评审,凌晨四点的黑河试验场,零下三十三度。客户拿了一台冷启动的车,中控屏上倒车影像全是雪花噪点,暗部细节直接糊成一片。我第一反应是sensor温度没上来,暗电流…

2026/8/21 0:00:42 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 0:02:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/20 6:11:08 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/20 21:46:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/21 0:14:22 阅读更多 →