Java输入输出:编程世界的入口和出口
目录
PS:输入输出为什么如此重要
一、输出
1.1 System.out.println()
1.2 println 和 print
1.3 输出变量的值
1.4 格式化打印
二、Java 的输入
2.1 引入Scanner类
2.1 第一步:引入 Scanner
2.2 第二步:创建 Scanner 对象
2.3 第三步:读取不同类型的输入
next() vs nextLine() 的区别
简单的对比表格
解决方案:在 nextInt() 后加一个 nextLine()
三、个人信息收集器
项目需求:
3.1 大框架
3.2 询问用户姓名
3.3 询问年龄
3.4 询问身高
3.5 展示最后的面板
3.6 释放系统资源
四、释放资源
PS:输入输出为什么如此重要
想象一下你正在用手机点外卖:
- 你输入了地址、选择了菜品(这是“输入”)
- 系统显示订单总价、预计送达时间(这是“输出”)
如果没有没有输入,手机就不能接受你的地址和选择的菜品;输出也一样,你也无法看到外卖的流程到哪一步,也无法看到外卖骑手的大概位置.
在 Java 编程中,输入(Input) 和 输出(Output) 合称 I/O(读作 “eye-oh”),是几乎所有程序的基础。哪怕是最简单的计算器(我们上篇博客的最后练习)、猜数字游戏,都离不开 I/O。
而对初学者来说,“怎么让程序接收我的输入?” 和 “怎么让它把结果告诉我?” 是最先遇到的两个问题,也是我们这篇博客的学习目标.
一、输出
1.1 System.out.println()
在我们学习java的第一天,我们就接触到了System.out.println(),在IDEA里面简写为“sout”,也就是下面这个代码:
public class main {static void main(String[] args) {System.out.println("Hello World");}
}
运行后屏幕会显示Hello World

但是,大家知道System.out.println()可以拿来打印,那我问大家,这段代码是什么意思呢?
其实大家能回答出来的也没有很多
System.out:代表“系统的输出设备”,通常是电脑屏幕println:是 “print line” 的缩写,意思是“打印一行”"Hello, World!":你要打印的内容(用双引号括起来的叫“字符串”)总的来说 :
System.out.println(你想说的话);就是让程序在屏幕上“说话”。
1.2 println 和 print
现在我们来试试这两段代码(分别使用println 和 print)最后的输出内容是什么:
static void main(String[] args) {System.out.println("Hello");System.out.println(" World");System.out.print("Hello");System.out.print(" World");}

大家可以明显的看出区别:
println:打印完自动换行,下一次输出从新一行开始
1.3 输出变量的值
光输出固定文字太无聊了。我们还可以输出变量(可以变化的值)。
static void main(String[] args) {int age = 18;String name = "张三";System.out.println("我今年" + age + "岁");System.out.println("我的名字叫" + "张三");}

这里用了 + 号连接文字和变量,就像拼积木一样。
注意:
+在这里是“拼接”意思,不是数学加法(虽然对数字也适用,但语境不同)。
1.4 格式化打印
在我们的java语言里,使用printf()来格式化输出.
如果你希望数字保留两位小数,或者对齐输出,可以用 System.out.printf()。
public static void main(String[] args) {double price = 19.9;int count = 3;double total = price * count;System.out.printf("单价 %.2f 元\n", price);System.out.printf("计数 %d 元\n", count);System.out.printf("总价 %.2f 元\n", total);}
输出见下图:

关键符号解释:
%f:表示一个浮点数(小数)%.2f:保留两位小数%d:表示一个整数\n:换行符(相当于按回车)
printf来自 C 语言,意思是 “print formatted”(格式化打印)。它很强大,但初学用println就够了。
二、Java 的输入
2.1 引入Scanner类
要让程序能够接收用户的输入,我们需要使用Scanner类。首先要在程序开头告诉Java我们要使用这个工具:
具体语法:
import java.util.Scanner;//导入包public class main {public static void main(String[] args) {Scanner 变量名1 = new Scanner(System.in);变量类型 变量名2 = 变量名1.nextLine();变量名1.close();//调用关闭方法}
}
现在我们来一个非常基础的java代码:
import java.util.Scanner; // 导入Scanner类
public class main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入你的姓名");String name = sc.nextLine();System.out.println("你的姓名是: " + name);sc.close();//注意,要记得调用关闭方法}
}
那么接下来让我们逐步来解释一下核心代码
2.1 第一步:引入 Scanner
Sanner作为一个类(我们第五篇博客就会讲到java的类),java并不能直接“打开它”,所以需要我们“导入”(IDEA作为智能的编辑器,只需要创建一个Sanner实例就会自动导入)
在代码最上方写:
import java.util.Scanner; // 导入Scanner类
想象一下:
import就像去工具箱里拿一把“输入专用的钥匙”。
2.2 第二步:创建 Scanner 对象
我们需要在main方法里创建一个Sanner实例:
Scanner scanner = new Scanner(System.in);//创建一个Scanner对象
System.in:代表“系统的输入设备”,通常是键盘
现在,scanner 就能帮你“听”用户从键盘敲的内容了。
2.3 第三步:读取不同类型的输入
Scanner 提供多种方法读取不同类型的数据:
| 方法 | 作用 | 示例 |
|---|---|---|
nextInt() | 读取一个整数 | int age = scanner.nextInt(); |
nextDouble() | 读取一个小数 | double height = scanner.nextDouble(); |
next() | 读取一个单词(不能有空格) | String name = scanner.next(); |
nextLine() | 读取一整行(包括空格) | String sentence = scanner.nextLine(); |
public static void main(String[] args) {Scanner sc = new Scanner(System.in);String a = sc.nextLine();//读取一整行(包括空格)最常用double age = sc.nextDouble();//读取一个小数int price = sc.nextInt();//读取一个整数String word = sc.next();//读取一个单词sc.close();System.out.println(a);System.out.println(age);System.out.println(price);System.out.println(word);}

next() vs nextLine() 的区别
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你的姓名");System.out.print("请输入你的姓:");String firstName = scanner.next(); // 读取到空格为止System.out.print("请输入你的名:");String lastName = scanner.next();System.out.println("你的姓名是:" + firstName + " " + lastName);// 清除缓冲区scanner.nextLine();System.out.print("请输入你的完整地址:");String address = scanner.nextLine(); // 读取整行System.out.println("你的地址是:" + address);scanner.close();}
简单的对比表格
| 方法 | 读取内容 | 停止条件 | 例子 |
|---|---|---|---|
next() | 一个单词 | 遇到空格或回车 | 输入"张三 李四" → 读取"张三" |
nextLine() | 整行文字 | 遇到回车键 | 输入"张三 李四" → 读取"张三 李四" |
运行结果见下图:

这里可能大家不是很懂,那么我们看看接下来这个代码:
static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("输入年龄:");int age = scanner.nextInt();System.out.print("输入姓名:");String name = scanner.nextLine();System.out.println("你好," + name + "," + age + "岁");}
你以为运行结果会是这样:
输入年龄:20
输入姓名:小明
你好,小明,20岁
但是真正的运行结果见下图:

为什么?
因为
nextInt()只读数字,不读你按的回车键。那个回车还留在“输入缓冲区”里。当紧接着调用
nextLine()时,它立刻读到这个回车,认为“用户已经输入了一行(空行)”,于是返回空字符串。
解决方案:在 nextInt() 后加一个 nextLine()
static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("输入年龄:");int age = scanner.nextInt();scanner.nextLine(); // 消耗掉多余的回车System.out.print("输入姓名:");String name = scanner.nextLine();System.out.println("你好," + name + "," + age + "岁");}

三、个人信息收集器
光看不动手,等于没学。我们来做一个 “个人信息收集器”,综合运用所学知识。
项目需求:
- 询问用户姓名(支持中文和空格)
- 询问年龄(整数)
- 询问身高(小数)
- 最后汇总输出所有
3.1 大框架
先把项目大框架构建一下:
static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("-----个人信息收集器-----");//询问用户姓名//询问年龄//询问身高//展示最后的面板//释放系统资源}
3.2 询问用户姓名
//询问用户姓名System.out.println("输入姓名");String name = sc.nextLine();
3.3 询问年龄
System.out.println("输入你的年龄");int age = sc.nextInt();sc.nextLine();//读取回车
3.4 询问身高
System.out.println("输入你的身高");double height = sc.nextDouble();sc.nextLine();
3.5 展示最后的面板
System.out.println("\n--- 你的信息如下 ---");System.out.println("姓名:" + name);System.out.println("年龄:" + age);System.out.printf("身高:%.2f 米%n", height);System.out.println("感谢填写!");
3.6 释放系统资源
sc.close();
四、释放资源
sc.close() 的位置和影响(逻辑隐患)
Scanner(System.in)关闭后,标准输入流System.in也会被关闭。- 如果程序后续还要读取输入(比如在更大的项目中),会抛出异常。
- 对于简单的小程序,关掉没问题;但在复杂程序中,通常不建议关闭包装
System.in的 Scanner。
完
