System.out的print和println方法,可以向控制台输出不同类型的数据,可以满足程序调试信息的输出要求。在实际应用中,输出数据时,要求数据必须按照一定的格式输出,如数据精度要求,小数点后保留2位有效数字、按照规定的格式输出日期、按照表格方式输出数据等要求。
System.out的printf方法可以对数据进行格式化输出,printf方法在Java API 文档中声明如下:
void printf(String format, Object... args)
中文注解:一个便捷的方法,使用指定的格式字符串和传入的参数,将格式化的字符串输出到输出流(输出设备)
传入的参数
String format
字符串类型,符合格式字符串语法描述的字符串
Object... args
格式字符串中格式说明符引用的参数,参数的数量是可变的,可以为零。
案例1:一个简单格式化输出的例子。在PbaseUnit8项目unit包下创建PrintfSample类。代码如下:
/**
* @Title: PrintfSample.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @version V1.0
*/
package unit;
/**
* @ClassName: PrintfSample
* @Description: Java API库的使用(格式化输出)案例1
* @author 编程训练营
*
*/
public class PrintfSample {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型 @throws
*/
public static void main(String[] args) {
/**
* 声明双精度浮点变量并赋值,
*/
double dTemp = 129.6789603;
// 用println方法输出dTemp
System.out.println("这是用println输出的数据:" + dTemp);
// 用printf方法输出dTemp,保留2为有效小数
System.out.printf("%s:%.2f", "这是用printf输出的数据", dTemp);
}
}代码结构分析
程序功能主要是演示println方法和printf的输出双精度浮点数的区别,println方法输出双精度浮点数时,不能对小数的有效位数控制输出,printf方法可以控制小数有效位数的输出。
程序增加了块注释语句,用于方法、语句以及变量的具体说明,提高程序代码的可读性和可维护性。块注释里的说明语句用“/*……*/”包括,每行说明语句用“*”开头。
printf语句中的“%s:%.2f”是格式字符串,其中“%s”是格式说明符,表示输出字符串,字符串内容取自格式字符串后面的参数列表,“%.2f”也是格式说明符,表示输出浮点数,并且保留2位有效小数,更改“%.”后面的数字,可以限制不同的小数位数输出,浮点数数值取自格式字符串后面的参数列表。参数列表跟在格式字符串后面,格式字符串中有多少个格式说明符,后面就有多少个参数,每个参数之间用英文逗号分隔。因为格式字符串“%s:%.2f”有两个格式说明符,因此在格式字符串后面应有两个参数,参数顺序与格式字符串中的格式说明符顺序保持一致,参数"这是用printf输出的数据"对应格式说明符%s,参数“dTemp”对应格式说明符%.2f。
程序执行结果如下图所示:
从运行结果可以看出,printf方法可以控制浮点数小数位数的输出。
printf方法常用格式说明符列表
%c 单个字符
%d 十进制整数
%f 十进制浮点数
%o 八进制数
%s 字符串
%u 无符号十进制数
%x 十六进制数
%% 输出百分号%
printf的常用格式控制:
%0m.n格式字符
下面对组成格式说明的各项加以说明:
% 格式说明的起始符号,不可缺少。
0 有0表示指定空位填0,如省略表示指定空位不填。
m.n m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度。用于说明输出的实型数的小数位数。未指定n时,隐含的精度为n=6位。例如:%.2f,m位默认位数,小数保留2位;%9.2f,意思是位数为9位,小数保留2位;%09.2f,意思是位数为9位,小数保留2位,位数不足的用0补齐。
案例2:格式化输出的例子。在PbaseUnit8项目unit包下创建PrintfSample2类。代码如下:
/**
* @Title: PrintfSample2.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @version V1.0
*/
package unit;
/**
* @ClassName: PrintfSample2
* @Description: Java API库的使用(格式化输出)案例2
* @author 编程训练营
*
*/
public class PrintfSample2 {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
/**
* 声明字符串类型变量并赋值,
*/
String szTemp = "y格式化输出演示";
/**
* 声明双精度浮点变量并赋值,
*/
double dTemp = 129.6789603;
/**
* 声明字符型变量并赋值,
*/
char chTemp = 'a';
// 用printf方法输出szTemp,字符串前后分别填充2个*字符
System.out.printf("**%s**\n", szTemp);
// 用printf方法输出dTemp,位数宽度为9,保留2为有效小数,空位用0填充
System.out.printf("%s:%09.2f\n", "输出浮点型变量", dTemp);
// 用printf方法输出chTemp,分别输出字符、十进制、十六进制
System.out.printf("%s:%c:\n十进制:%d:\n十六进制:%x\n", "输出字符型变量", chTemp, (int) chTemp, (int) chTemp);
}
}代码结构分析
程序功能主要是演示printf的格式化输出,分别格式化输出字符串、浮点型和字符型数据。
程序的变量命名采用了匈牙利命名法,匈牙利命名法是一种编程时的命名规范,匈牙利命名法的基本原则是对每一变量的名称都要求有明确含义,变量的类型通过规定的前缀字母来识别。例如:ch表示字符型数据、sz表示字符串类型、d表示双精度浮点数等。
在“System.out.printf("**%s**\n",szTemp);”语句中,“”**%s**\n"”是格式字符串,%s表示输出字符串,字符串的内容来自szTemp,%s前面和后面的**是要输出的字符串内容,格式字符串里面可以添加任何想要输出的内容。\n是换行符,下次输出时将会另起一行。
在“System.out.printf("%s:%09.2f\n","输出浮点型变量",dTemp); ”语句中,第一个%s的内容来自于格式字符串后面的第一个字符串参数“输出浮点型变量”,%09.2f表示输出9位数浮点数,保留2位有效小数,位数不足的,前面用0填充,浮点数值内容来自于dTemp。
该语句也可以改写为下面的语句,效果是等同的:
System.out.printf("输出浮点型变量:%09.2f\n",dTemp);在输出字符型变量语句中,分别应用%c、 %d和%x将字符型变量按照字符、十进制数值和十六进制数值输出,其中“(int)”是将字符类型强制转换为int类型操作符,其意义是将字符强制转换为数值输出。
程序执行结果如下图所示:

从上面输出的结果可以看出,格式化输出方法printf可以按照程序指定的格式输出数据。