java标准输入输出需用scanner或bufferedreader包装system.in读字符串/基本类型,system.out可直接print/println/print格式化输出;scanner读数字后需nextline()清除换行符。

Java 中标准输入输出主要通过 System.in(字节输入流)和 System.out(字节输出流)实现,但它们本身不能直接读写字符串或基本类型,需配合包装类使用。
用 System.in 读取用户输入
System.in 是 InputStream 的实例,只能按字节读取。实际开发中几乎总是用缓冲方式处理,避免逐字节操作:
监控 Victron Energy 电力系统,生成包含电池状态、光伏发电量和活动警报的精美每日邮件报告。集成 Vic...
- 常用组合:用
BufferedReader包装InputStreamReader(System.in),支持按行读取字符串 - 更便捷方式:用
Scanner直接包装System.in,支持nextLine()、nextInt()、nextDouble()等方法 - 注意:
Scanner读取数字后若接着调用nextLine(),可能因换行符残留而跳过输入,建议在数字读取后加一次nextLine()消耗掉回车
用 System.out 输出内容
System.out 是 PrintStream 类型,已封装好,可直接调用多种 print 方法:
-
System.out.print(x):不换行输出 -
System.out.println(x):输出后自动换行 -
System.out.printf("格式串", args...):支持格式化输出,类似 C 的printf - 支持链式调用,例如
System.out.println("a").println("b")(返回自身)
典型代码示例
以下是一个带输入验证的简单交互程序片段:
Scanner sc = new Scanner(System.in);
System.out.print("请输入姓名:");
String name = sc.nextLine();
System.out.print("请输入年龄:");
int age = sc.nextInt();
sc.nextLine(); // 消耗换行符
System.out.printf("你好,%s!你今年 %d 岁。\n", name, age);
sc.close();
注意事项与常见问题
-
System.in和System.out是静态字段,无需创建对象,但包装类(如Scanner、BufferedReader)需要显式实例化 - 使用完
Scanner后建议调用close(),否则可能影响后续输入(尤其在 IDE 或某些容器环境中) -
System.in.read()会阻塞等待输入,且只读一个字节(ASCII 字符对应其 ASCII 码),不推荐直接使用 - 中文输入一般无乱码问题(现代 JDK 默认 UTF-8 或系统编码),但若出现异常,可在
InputStreamReader中显式指定编码,如new InputStreamReader(System.in, "UTF-8")
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










