核心方法
Java 的标准输出流是 System.out,它是一个 PrintStream 类型的对象,我们主要通过它来向控制台打印信息,以下是几个最核心的方法:

| 方法 | 描述 | 示例 |
|---|---|---|
System.out.println() |
最常用,并在末尾换行。 | System.out.println("Hello, World!"); |
System.out.print() |
,末尾不换行,下次打印会紧接其后。 | System.out.print("Hello, "); System.out.println("World!"); |
System.out.printf() |
格式化输出,类似于 C 语言中的 printf,可以根据指定的格式字符串来输出变量。 |
System.out.printf("我的名字是 %s,今年 %d 岁。", "张三", 25); |
System.out.write() |
写入单个字节,不常用,因为比较底层。 | System.out.write(65); // 会输出字符 'A' |
System.out.println() - 最基础、最常用
这是每个 Java 学习者接触的第一个方法,它会将你给的内容打印到控制台,并自动将光标移动到下一行。
示例代码:
public class PrintlnExample {
public static void main(String[] args) {
System.out.println("这是第一行输出。");
System.out.println("这是第二行输出。");
int age = 30;
String name = "李四";
// 可以直接打印变量
System.out.println(name);
System.out.println(age);
// 也可以打印表达式的结果
System.out.println("明年" + name + "的年龄是 " + (age + 1));
}
}
输出结果:
这是第一行输出。
这是第二行输出。
李四
30
明年李四的年龄是 31
System.out.print() - 不换行打印
当你想在同一行打印多个内容时,这个方法就非常有用。

示例代码:
public class PrintExample {
public static void main(String[] args) {
System.out.print("请输入你的名字: ");
// 这里的 print 不会换行,用户输入会跟在 "名字: " 后面
// System.out.print("张三\n"); // 如果想换行,可以手动加 \n
System.out.print(",你好!\n"); // \n 是换行符
for (int i = 1; i <= 5; i++) {
System.out.print(i + " "); // 在同一行打印数字,用空格隔开
}
}
}
输出结果:
请输入你的名字: ,你好!
1 2 3 4 5
(注意:System.out.print("请输入你的名字: "); 这行代码在运行时,光标会停在 后面,等待用户输入。)
System.out.printf() - 格式化输出
当你需要将变量嵌入到字符串中,并且希望对格式有精确控制时(保留两位小数、设置宽度等),printf 是最佳选择。

格式说明符:
| 格式说明符 | 数据类型 | 示例 |
|---|---|---|
%d |
十进制整数 | int, long |
%f |
浮点数 | float, double |
%s |
字符串 | String, char[] |
%c |
字符 | char |
%b |
布尔值 | boolean |
%n |
平台无关的换行符 | (推荐使用,比 \n 更通用) |
%.2f |
保留两位小数的浮点数 | |
%5d |
宽度为5的整数(右对齐) | |
%-5d |
宽度为5的整数(左对齐) |
示例代码:
public class PrintfExample {
public static void main(String[] args) {
String name = "王五";
int score = 95;
double price = 19.9956;
boolean isPassed = true;
// 基本用法
System.out.printf("学生姓名: %s, 分数: %d\n", name, score);
// 格式化浮点数,保留两位小数
System.out.printf("商品价格: ¥%.2f\n", price); // 输出 19.99 (注意四舍五入)
// 设置宽度和对齐方式
System.out.printf("|%10d|\n", 123); // 右对齐,宽度为10
System.out.printf("|%-10d|\n", 123); // 左对齐,宽度为10
// 使用 %n 作为换行符,跨平台兼容
System.out.printf("你好,%s!%n", name);
System.out.printf("考试通过: %b\n", isPassed);
}
}
输出结果:
学生姓名: 王五, 分数: 95
商品价格: ¥19.99
| 123|
|123 |
你好,王五!
考试通过: true
System.err - 标准错误输出
除了 System.out,Java 还提供了 System.err,它也是一个 PrintStream,用于输出错误信息,默认情况下,System.err 的输出和 System.out 一样都指向控制台,但很多 IDE 和终端会将它们用不同的颜色区分开(System.err 是红色),这有助于快速识别错误信息。
示例代码:
public class ErrorExample {
public static void main(String[] args) {
System.out.println("这是一条普通信息。");
System.err.println("这是一条错误信息!程序可能出问题了。");
System.out.println("这是一条后续的普通信息。");
}
}
在 IntelliJ IDEA 中的输出示例: (普通信息是黑色,错误信息是红色)
总结与最佳实践
- 日常调试和简单输出:使用
System.out.println(),简单直接,一目了然。 - 在同一行打印多个内容:使用
System.out.print(),并在需要时手动添加\n或使用System.out.println()来换行。 - 格式化输出:当需要复杂的格式控制,如货币、日期、对齐等时,务必使用
System.out.printf(),它能让你的输出更专业、更易读。 - 输出错误信息:区分使用
System.out和System.err。System.out用于常规信息,System.err用于错误和异常信息,便于日志管理和问题排查。 - 日志框架:对于大型项目,
System.out.println并不是最佳选择,因为它难以控制级别(如只打印错误信息)、难以重定向到文件,在生产环境中,通常会使用专业的日志框架,如 SLF4J + Logback 或 Log4j2,这些框架提供了更强大的功能,如日志级别、日志文件滚动、异步日志等,但在学习和小型项目中,System.out.println完全够用。
