最短的 Java 程序
public class Hello {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
类、main、System.out.println——经典样板。比 C# Console.WriteLine("Hello"); 啰嗦——这是 Java 现实。
单文件跑(Java 11+)
文件 Hello.java 内容如上:
java Hello.java
# Hello!
不需要 javac 单独编译。教学 / 玩 / 小脚本用这个模式。
命令行参数
public class Greet {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("Hello, world!");
} else {
System.out.println("Hello, " + args[0]);
}
}
}
java Greet.java Alice
# Hello, Alice
标准项目结构
my-app/
├── pom.xml Maven 项目描述
├── src/
│ ├── main/
│ │ ├── java/ 源码
│ │ │ └── com/example/
│ │ │ └── App.java
│ │ └── resources/ 非代码资源(配置、模板)
│ └── test/
│ └── java/ 测试代码
└── target/ 构建产物(自动生成,gitignore)
com.example.App——这是包名 + 类名。
// src/main/java/com/example/App.java
package com.example;
public class App {
public static void main(String[] args) {
System.out.println("Hello from App");
}
}
包路径必须和目录结构一致——package com.example; 对应 src/main/java/com/example/。
用 Maven 创建项目
mvn archetype:generate \
-DgroupId=com.example \
-DartifactId=my-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=1.4 \
-DinteractiveMode=false
cd my-app
mvn compile
mvn exec:java -Dexec.mainClass="com.example.App"
或简单点用 IntelliJ:File → New Project → Maven。
pom.xml(最小)
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 加依赖 -->
</dependencies>
</project>
详见 第 04 篇。
jbang(开发玩具时用)
sdk install jbang # 第 02 篇装过
写脚本:
///usr/bin/env jbang "$0" "$@" ; exit $?
public class hello {
public static void main(String[] args) {
System.out.println("Hi from jbang");
}
}
chmod +x hello.java
./hello.java
jbang 自动处理依赖(用 //DEPS 注释)、不要 Maven 工程:
//DEPS com.fasterxml.jackson.core:jackson-databind:2.16.0
import com.fasterxml.jackson.databind.ObjectMapper;
public class jsonScript {
public static void main(String[] args) throws Exception {
var mapper = new ObjectMapper();
var json = mapper.writeValueAsString(java.util.Map.of("hello", "world"));
System.out.println(json);
}
}
学习 + 原型阶段非常香。生产服务还是用 Maven / Gradle。
main 方法的形式
// 经典
public static void main(String[] args) { ... }
// args 名可以改
public static void main(String[] arr) { ... }
// throws Exception(main 抛了让 JVM 处理)
public static void main(String[] args) throws Exception { ... }
// Java 21+ 预览:实例 main(少样板)
void main() { // 不需要 public static / String[] args
System.out.println("Hi");
}
Java 21+ 预览语法:可省 public static / String[] args / 甚至外层类(unnamed classes)。教学用挺好。生产代码还是写标准式。
控制台 IO
import java.util.Scanner;
public class Echo {
public static void main(String[] args) {
var sc = new Scanner(System.in);
System.out.print("名字?");
var name = sc.nextLine();
System.out.println("Hello, " + name);
}
}
Scanner.nextLine() / nextInt() / 等。
Java 17+ 的 readLine:
var line = System.console().readLine("名字? "); // 但 console() 在 IDE 不工作
输出
System.out.println("普通");
System.err.println("错误"); // stderr
System.out.printf("%s = %d%n", "x", 10); // printf 风格,%n 是平台换行
System.out.print("无换行");
%n 是 Java 的换行(跨平台),\n 也行但永远是 LF。
调试 + 打印
新手最好的朋友:
System.out.println("DEBUG: x = " + x);
进阶用日志库(Logback / Log4j2,但这是工程话题,本系列不展开)。
→ 下一篇 IDE + 构建工具