最短的 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 + 构建工具