一、输出语句:System.out
详解
System.out
是 Java 中最基础的输出工具,用于将数据打印到控制台,常用的有两种方法:println()
和 print()
,适用于不同场景。
1.1 换行输出:System.out.println()
语法格式:
System.out.println(输出内容);
功能:
打印内容后自动换行,下次输出从新的一行开始。
示例代码:
public class OutputDemo1 {
public static void main(String[] args) {
// 输出字符串
System.out.println("Hello, Java!");
// 输出数字
System.out.println(100);
// 输出变量
int age = 20;
System.out.println(age);
// 输出表达式结果
System.out.println(10 + 20);
// 空参数:仅换行
System.out.println(); // 单独换行
System.out.println("上面是空行");
}
}
运行结果:
Hello, Java!
100
20
30
上面是空行
特点:
- 支持输出任意类型数据(字符串、数字、变量、表达式等)。
- 括号内可以为空,仅执行换行操作(常用在需要分隔内容时)。
1.2 不换行输出:System.out.print()
语法格式:
System.out.print(输出内容);
功能:
打印内容后不换行,下次输出紧跟在当前内容后面。
示例代码:
public class OutputDemo2 {
public static void main(String[] args) {
System.out.print("Hello, "); // 不换行
System.out.print("World!"); // 紧跟在上面内容后
System.out.print("n"); // 手动换行(n是换行符)
System.out.print("Java ");
System.out.print("is fun!");
}
}
运行结果:
Hello, World!
Java is fun!
特点:
- 输出后不会自动换行,需手动添加
n
实现换行(如示例中的System.out.print("n")
)。 - 括号内不能为空,否则编译报错(与
println()
不同)。
二、输入语句:Scanner
详解
Scanner
是 Java 提供的基础输入工具,用于从控制台获取用户输入的数据(如数字、字符串等)。新手使用时需严格按照 “导入包 → 创建对象 → 读取数据→关闭对象” 四步操作。
2.1 步骤 1:导入 Scanner
包
Scanner
类位于 java.util
包中,使用前必须在代码开头导入该包,否则无法识别。
导入格式:
import java.util.Scanner; // 放在类定义之前
2.2 步骤 2:创建 Scanner
对象
通过 new Scanner(System.in)
创建扫描器对象,用于接收控制台输入。
语法:
Scanner sc = new Scanner(System.in); // sc是对象名,可自定义(如input、scanner等)
2.3 步骤 3:读取不同类型的输入数据
Scanner
提供了多种方法读取不同类型的数据,新手常用的有以下几种:
(1)读取整数:nextInt()
用于获取用户输入的整数(int
类型)。
示例代码:
import java.util.Scanner; // 步骤1:导入包
public class InputDemo1 {
public static void main(String[] args) {
// 步骤2:创建Scanner对象
Scanner sc = new Scanner(System.in);
// 提示用户输入
System.out.print("请输入一个整数:");
// 步骤3:读取整数
int num = sc.nextInt(); // 将输入的整数赋值给变量num
// 输出结果
System.out.println("你输入的整数是:" + num);
}
}
运行流程:
- 程序执行到
sc.nextInt()
时会暂停,等待用户输入。 - 用户在控制台输入整数(如
100
)并按回车,程序继续执行,将输入值赋给num
。 - 输出结果:
你输入的整数是:100
。
(2)读取字符串:next()
和 nextLine()
两种方法都可读取字符串,但有重要区别,容易混淆:
方法 | 功能 | 示例输入 | 输出结果 |
---|---|---|---|
next() |
读取到空格前的内容(自动忽略开头的空格,遇到空格或回车停止)。 | "Hello World" | "Hello" |
nextLine() |
读取一整行内容(包括空格,遇到回车停止)。 | "Hello World" | "Hello World" |
示例代码:
import java.util.Scanner;
public class InputDemo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("用next()输入字符串:");
String str1 = sc.next();
System.out.print("用nextLine()输入字符串:");
sc.nextLine(); // 注意:这里是为了跳过next()留下的回车符(见注意事项2)
String str2 = sc.nextLine();
System.out.println("next()结果:" + str1);
System.out.println("nextLine()结果:" + str2);
}
}
运行结果:
用next()输入字符串:Hello Java
用nextLine()输入字符串:Hello Java
next()结果:Hello
nextLine()结果:Hello Java
(3)读取小数:nextDouble()
用于获取用户输入的小数(double
类型),用法与 nextInt()
类似。
示例代码:
import java.util.Scanner;
public class InputDemo3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个小数:");
double num = sc.nextDouble();
System.out.println("你输入的小数是:" + num);
}
}
运行结果
请输入一个小数:3.14
你输入的小数是:3.14
2.4 Scanner
常见问题与解决方法
问题 1:输入类型不匹配导致崩溃
现象:当使用 nextInt()
读取整数时,若输入了字母或符号(如 abc
、12.3
),程序会报错(InputMismatchException
)。
解决:输入时严格按照提示的类型输入(如提示 “输入整数” 就只输入整数)。
问题 2:nextLine()
读取不到内容(被跳过)
原因:nextInt()
、next()
等方法读取数据后,会留下一个 “回车符”(n
),而 nextLine()
会直接读取这个回车符并视为空行,导致跳过输入。
解决:在 nextLine()
前先调用一次 sc.nextLine()
消耗掉回车符(如 2.3 中 nextLine()
的示例代码)。
问题 3:忘记关闭 Scanner
对象
现象:程序能正常运行,但会出现警告(“Resource leak: ‘sc’ is never closed”)。
解决:读取完数据后,用 sc.close()
关闭对象(新手阶段可暂时忽略,不影响功能)。
sc.close(); // 放在所有输入操作之后