在 Java 中,除了常见的 System.out.print()

在 Java 中,除了常见的 System.out.print()、System.out.println() 和 System.out.printf() 方法,还有许多其他输出方式。以下是一些额外的输出代码示例,涵盖不同场景和需求:

1. 使用 System.console() 输出

System.console() 提供了与控制台交互的能力,可以用于读取和输出信息(注意:在某些 IDE 中可能不可用,通常在命令行运行有效)。

java

public class Main {

public static void main(String[] args) {

java.io.Console console = System.console();

if (console != null) {

console.printf("Hello, %s!\n", "World");

} else {

System.out.println("Console is not available.");

}

}

}

2. 使用 StringBuilder 或 StringBuffer 拼接后输出

当需要动态拼接大量字符串时,StringBuilder 或 StringBuffer 是更高效的选择。

java

public class Main {

public static void main(String[] args) {

StringBuilder sb = new StringBuilder();

sb.append("Hello").append(", ").append("World").append("!");

System.out.println(sb.toString());

}

}

3. 使用 Object.toString() 方法输出对象信息

所有 Java 对象都继承自 Object 类,可以通过重写 toString() 方法自定义对象的输出。

java

class Person {

String name;

int age;

Person(String name, int age) {

this.name = name;

this.age = age;

}

@Override

public String toString() {

return "Person{name='" + name + "', age=" + age + "}";

}

}

public class Main {

public static void main(String[] args) {

Person person = new Person("Alice", 25);

System.out.println(person); // 自动调用 toString()

}

}

4. 使用 Arrays.toString() 输出一维数组

Arrays.toString() 是输出一维数组的便捷方法。

java

import java.util.Arrays;

public class Main {

public static void main(String[] args) {

int[] numbers = {1, 2, 3, 4, 5};

System.out.println(Arrays.toString(numbers)); // 输出: [1, 2, 3, 4, 5]

}

}

5. 使用 System.lineSeparator() 跨平台换行

System.lineSeparator() 返回当前操作系统的换行符,确保代码在不同平台上都能正确换行。

java

public class Main {

public static void main(String[] args) {

String line1 = "Hello" + System.lineSeparator() + "World!";

System.out.println(line1);

}

}

6. 使用 PrintStream 输出到其他流

System.out 是 PrintStream 的一个实例,可以创建自己的 PrintStream 输出到其他地方。

java

import java.io.ByteArrayOutputStream;

import java.io.PrintStream;

public class Main {

public static void main(String[] args) throws Exception {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

PrintStream ps = new PrintStream(baos);

ps.println("This is written to a byte array.");

ps.close();

System.out.println(baos.toString()); // 输出: This is written to a byte array.

}

}

7. 使用 java.util.Formatter 格式化输出

Formatter 类提供了更底层的格式化功能,类似于 printf。

java

import java.util.Formatter;

public class Main {

public static void main(String[] args) {

StringBuilder sb = new StringBuilder();

try (Formatter formatter = new Formatter(sb)) {

formatter.format("Name: %s, Age: %d", "Charlie", 40);

}

System.out.println(sb.toString()); // 输出: Name: Charlie, Age: 40

}

}

8. 使用 Stream 和 Collectors.joining() 输出集合

在 Java 8 中,可以使用流(Stream)和 Collectors.joining() 方法输出集合内容。

java

import java.util.Arrays;

import java.util.List;

import java.util.stream.Collectors;

public class Main {

public static void main(String[] args) {

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

String result = names.stream().collect(Collectors.joining(", "));

System.out.println(result); // 输出: Alice, Bob, Charlie

}

}

9. 使用 JOptionPane 弹出对话框输出

在桌面应用程序中,可以使用 JOptionPane 弹出对话框显示信息。

java

import javax.swing.JOptionPane;

public class Main {

public static void main(String[] args) {

JOptionPane.showMessageDialog(null, "This is a dialog output!");

}

}

10. 使用 Thread.dumpStack() 输出堆栈跟踪

Thread.dumpStack() 可以输出当前线程的堆栈跟踪信息,用于调试。

java

public class Main {

public static void main(String[] args) {

System.out.println("Before dumpStack");

Thread.dumpStack();

System.out.println("After dumpStack");

}

}

11. 使用 ProcessBuilder 捕获子进程输出

通过 ProcessBuilder 启动外部进程,并捕获其输出。

java

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class Main {

public static void main(String[] args) throws Exception {

ProcessBuilder pb = new ProcessBuilder("echo", "Hello from subprocess!");

Process process = pb.start();

try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {

String line;

while ((line = reader.readLine()) != null) {

System.out.println(line);

}

}

}

}

12. 使用 System.nanoTime() 或 System.currentTimeMillis() 输出时间

可以输出时间戳或计算代码执行时间。

java

public class Main {

public static void main(String[] args) {

long start = System.nanoTime();

// 模拟一些操作

try { Thread.sleep(500); } catch (InterruptedException e) {}

long end = System.nanoTime();

System.out.println("Execution time: " + (end - start) + " ns");

}

}

总结

简单输出:System.out.print()、System.out.println()

格式化输出:String.format()、System.out.printf()、Formatter

数组和集合输出:Arrays.toString()、Arrays.deepToString()、Collectors.joining()

日志和错误输出:System.err、日志框架(如 Log4j、SLF4J)

文件和流输出:FileWriter、PrintWriter、PrintStream

GUI 输出:JOptionPane、Swing、JavaFX

调试输出:Thread.dumpStack()、System.console()

根据具体需求选择合适的输出方式,既能满足简单输出,也能应对复杂场景。

特别声明:[在 Java 中,除了常见的 System.out.print()] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

为什么有的秋裤会越穿越冷?你可能穿错了(为什么有的秋裤穿着冷)

当秋裤材质不透气(如劣质化纤、某些加涂层的塑形面料),这些湿气无法排出,会积聚在皮肤与面料之间。实际体感:初穿上身觉得暖,但活动或久坐后,小腿和脚踝会率先感到被湿冷包裹的寒意,脱下后皮肤常有潮湿感。 动态调…

为什么有的秋裤会越穿越冷?你可能穿错了(为什么有的秋裤穿着冷)

打破空间局限!物联网卡如何让警报器实现智能远程安防(打破空间局限的例子)

配备物联网卡的智能安防设备能在秒级内将报警信息通过4G5G网络传送至用户手机和管理平台。一张物联卡可以让报警器与摄像头、门禁系统、照明设备等形成智能联动:当红外探测器触发异常时,系统自动开启周边灯光、调转摄…

打破空间局限!物联网卡如何让警报器实现智能远程安防(打破空间局限的例子)

内蒙古自治区文物局赠锦旗致谢自治区大『数据中心』 共推文物工作『数字化』转型(内蒙古自治区文史研究馆)

1月23日,内蒙古自治区文物局向自治区大『数据中心』赠送锦旗,对自治区大『数据中心』在文物『数字化』工作中提供的扎实技术支撑表示感谢,标志着双方在文化遗产保护领域的协作取得阶段性成果。 2025年,围绕能源领域文物审批…

内蒙古自治区文物局赠锦旗致谢自治区大『数据中心』 共推文物工作『数字化』转型(内蒙古自治区文史研究馆)

陈雪凝丈夫发声明:承认有非婚生子,每月付3万抚养费(陈雪凝经历)

声明中,李瑞滨承认有个孩子,但特别强调孩子的母亲与他并无恋人关系。婚礼刚过去不到九天,李瑞滨却突然宣布认子,而且孩子母亲与他并非恋人关系。更让人关注的是,陈雪凝对这一事件的反应,她在婚礼后关闭了评论区,并发布…

陈雪凝丈夫发声明:承认有非婚生子,每月付3万抚养费(陈雪凝经历)

告别翻版汤洛雯!游嘉欣新剧演烈女飙车戏,转型搏上位

游嘉欣的演艺生涯从20岁时参演《使徒行者3》里的龙套角色开始,直到凭借电视剧《香港爱情故事》才正式签约TVB。 在行业中奋斗了7年的游嘉欣,虽然过往大多饰演配角,作品不算多,但她凭借在《侠医》中的突…

告别翻版汤洛雯!游嘉欣新剧演烈女飙车戏,转型搏上位