一、静态成员变量:System.out
在Java中,控制台(也称为命令行或终端)结果的输出主要通过System.out.println()
方法实现,这是Java中最常用的输出方式之一。System.out
是java.lang.System
类的一个静态成员变量,代表标准输出流(通常是控制台)。
1-1、println()
方法
println()
方法是PrintStream
类的一个方法,用于向标准输出流打印一行文本,并在末尾自动添加一个换行符。
public class HelloWorld {
public static void main(String[] args) {
// 向控制台输出一行文本
System.out.println("Hello, World!");
}
}
1-2、print()
方法
如果你想要输出文本但不希望在末尾添加换行符,可以使用System.out.print()
方法。
public class PrintExample {
public static void main(String[] args) {
// 向控制台输出文本,但不换行
System.out.print("Hello, ");
System.out.print("World!");
// 这将输出:Hello, World!(没有换行)
}
}
1-3、printf()
方法
对于需要格式化输出的场景(比如打印数字或带有占位符的字符串),可以使用System.out.printf()
方法。这个方法类似于C语言中的printf()
函数。
public class PrintfExample {
public static void main(String[] args) {
int number = 123;
// 使用printf进行格式化输出
System.out.printf("The number is: %d%n", number);
// %d是整数占位符,%n是平台无关的行分隔符
}
}
1-4、System.err错误输出
除了标准输出流System.out
,Java还提供了标准错误输出流System.err
,用于输出错误信息或警告信息。使用System.err.println()
可以向错误输出流打印信息,这在调试程序或向用户报告错误时非常有用。
public class ErrorOutputExample {
public static void main(String[] args) {
// 向错误输出流打印信息
System.err.println("Error: Something went wrong!");
}
}
打印效果:
二、格式化字符串的占位符
2-1、%s
%s
是一个格式化字符串的占位符,用于在 String.format()
方法或 System.out.printf()
方法中指示该位置应该被替换为一个字符串类型的参数。
当你使用这些方法时,%s
会被传递给方法的相应字符串参数所替换。
1、使用 String.format()
public class StringFormatExample {
public static void main(String[] args) {
String name = "Alice";
String greeting = String.format("Hello, %s!", name);
System.out.println(greeting); // 输出: Hello, Alice!
}
}
在这个例子中,%s
被 name
变量的值 "Alice"
所替换。
2、使用 System.out.printf()
public class SystemOutPrintfExample {
public static void main(String[] args) {
String name = "Bob";
System.out.printf("Hello, %s!%n", name);
// 注意:%n 是一个平台无关的行分隔符,在Windows上是\r\n,在Unix/Linux上是\n
}
}
输出效果:
在这个例子中,%s
同样被 name
变量的值 "Bob"
所替换,并且使用了 %n
作为平台无关的行分隔符来结束输出行。
2-2、格式化字符串的其他占位符
除了 %s
之外,String.format()
和 System.out.printf()
还支持其他多种类型的占位符,例如:
%d
或%i
:表示整数。%f
:表示浮点数。%t
:表示日期/时间。%c
:表示字符。%b
:表示布尔值。
2-3、自定义占位符的行为
使用String.format()
或System.out.printf()
方法时,你可以通过指定宽度、精度以及使用其他标志来自定义格式化字符串中的占位符行为。这些自定义选项允许你精确地控制输出格式,以满足各种需求。
语法:
%[flags][width].[precision]conversion
1、宽度(Width)
宽度指定了最小字段宽度。
如果参数的长度小于指定的宽度,则输出将被填充(默认情况下使用空格,但可以使用其他标志来改变填充字符)。如果参数的长度大于指定的宽度,则宽度设置将被忽略。
// 输出:" Hello" (前面填充了空格以达到10个字符的宽度)
System.out.printf("%10s%n", "Hello");
2、精度(Precision)
对于浮点数、字符串和字符数组,精度指定了小数点后的位数或最大字符数。对于整数,精度通常被忽略,但某些情况下可以用于指定最小数字位数(通过与其他标志结合使用)。
// 输出:"3.14" (保留两位小数)
System.out.printf("%.2f%n", 3.1415926);
// 输出:"Hello" (只取前5个字符)
System.out.printf("%.5s%n", "Hello, World!");
3、标志(Flags)
标志用于修改输出格式。常用的标志包括:
-
:左对齐输出(默认情况下是右对齐)。+
:对于数值类型,输出符号(即使是非负数也输出+
号)。- (空格):对于数值类型,如果符号为正,则在数值前面添加一个空格(默认情况下,正数前面没有空格)。
#
:对于浮点数和整数,输出类型的替代形式(例如,十六进制数前面加上0x
,八进制数前面加上0
)。0
:对于数值类型,使用0
而不是空格进行填充(与宽度一起使用)。
System.out.printf("%-10s%n", "Hello"); // 输出:"Hello " (左对齐,填充空格)
System.out.printf("%+d%n", 42); // 输出:"+42" (带正号的整数)
System.out.printf("%05d%n", 42); // 输出:"00042" (用0填充到5位宽度)
System.out.printf("%#x%n", 255); // 输出:"0xff" (十六进制数的替代形式)
三、键盘录入
键盘录入通常是通过Scanner
类实现的,这个类位于java.util
包中。
import java.util.Scanner;
public class KeyboardInputExample {
public static void main(String[] args) {
// 创建Scanner对象来读取键盘输入
Scanner scanner = new Scanner(System.in);
// 提示用户输入一个整数
System.out.println("请输入一个整数:");
// 使用nextInt()方法读取整数
int inputInt = scanner.nextInt();
// 输出用户输入的整数
System.out.println("你输入的整数是:" + inputInt);
// 关闭scanner对象
scanner.close();
}
}
记得在程序结束时关闭
Scanner
对象,以释放与之相关的资源。这可以通过调用scanner.close()
来实现。然而,如果你在一个大型项目中频繁地打开和关闭
Scanner
对象,可能会遇到NoSuchElementException
异常。在这种情况下,考虑重用Scanner
对象或只在必要时关闭它。
3-1、第一套体系:
nextInt():接收整数
nextDouble():接收小数
next():接收字符串
遇到空格,制表符,回车就停止接受。这些符号后面的数据就不会接受了
示例:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个整数");
int num1 = scanner.nextInt();
System.out.println(num1);
System.out.println("请输入第二个整数");
int num2 = scanner.nextInt();
System.out.println(num2);
scanner.close();
}
空格前的数字给到了num1,空格后的数字给到了num2。
3-2、第二套体系:
nextLine():接收字符串
可以接收空格,制表符,遇到回车才停止接受数据。
不要混用!!!
先用第一套系统读取数据,再用第二套体系读取数据,可能会遇到问题。这是因为
nextInt()
、nextDouble()
等方法不会消耗掉输入末尾的换行符(Enter键产生的),而nextLine()
会读取到换行符为止的所有内容(包括换行符之前的空白字符,如空格和制表符)。因此,如果你在读取整数之后立即调用nextLine()
,它会返回空字符串,因为它实际上读取了整数输入后的换行符。建议先用第一套,后面用到类型转换再用第二套。