在之前的文章和案例中,我们已经知道Java是如何实现输出功能的。没错,就是用System.out.println()语句实现的!下面一哥就给大家详细解读一下这句话的作用和含义。1.System我们先来看看什么是System。System是Java自带的类,代表系统类。这个类位于java.lang包中,很多有用的系统级属性和控制方法都在这个类中。System类的构造函数是私有(private)修饰的,所以我们不能直接创建这个类的对象,也就是不能实例化这个类。关于这些对象的实例化,易哥后面讲解面向对象的时候会详细讲解,不用着急。System内部的成员变量和成员方法都是静态的,我们可以方便的直接调用。在System类中,它为我们提供了以下核心功能:标准输入输出:如out、in、err;访问外部定义的属性和环境变量:如getenv()、setenv()、getProperties()和setProperties();●加载文件和类库的方法:如load()和loadLibrary();●快速复制数组的方法:arraycopy();●jvm操作:如gc()、runFinalization()、exit();●获取时间的方法:如System.nanoTime、System.currentTimeMillis。2.out和errout代表一个“标准”输出流,是System类的静态成员,我们可以直接调用,而这个成员变量是对java.io.PrintStream类的引用。还有一个输出流err,其功能类似于out。err表示“标准”错误输出流,可以打开并准备好接受输出数据。err流一般用来显示错误信息,或者显示需要用户特别注意的信息,控制台会显示红色文字。其实out和err的用法是完全一样的,功能也基本一样。out和err的唯一区别是out往往有缓存功能,而err没有缓存功能(可以更改默认设置)。3、print和printlnprint()和println()都是java.io.PrintStream类中的方法,它们的作用都是向控制台输出信息。两者的基本功能完全一样,只是print()方法不会产生换行符,而println()方法会产生换行符,因为println是printline的缩写,意思是输出和换行。通过以上三个API(应用程序编程接口)的解释,我们可以总结出一个基本规律:在Java中,被static关键字修饰的成员变量可以直接以“类名.成员名”的形式引用,无需创建类名。类的实例对象。所以我们可以直接调用System类中的静态成员out,即System.out。又因为System.out是java.io.PrintStream类的实例引用,所以可以通过System.out.println();的形式调用。如果上面这段话让你觉得有点困惑,请不要担心。这个属于面向对象的知识,我们还没有学过。在后面面向对象的章节中,易哥会详细讲解!4.基本案例下面是一个关于标准输出的代码案例,大家可以练习一下,非常简单。publicclassDemo01{publicstaticvoidmain(String[]args){//输出语句//不包装输出System.out.print("Hello");System.out.print("世界");//包装输出System.out.println("Hello");System.out.println("依依哥哥");//标准错误输出,控制台会以红色文字显示System.err.append("Standarderroroutput,haha??ha");}}运行效果如下图所示:五、格式化输出5.1概念有时候,计算机默认的输出数据格式可能不能满足我们阅读的需要,比如有些人想保留小数点后两位,也有人想保留小数点后四位。每个人的需求都是个性化的,那么Java能不能针对特殊需求提供一些个性化的输出呢?这是可以实现的!这需要格式化输出!使用格式化输出功能,可以将数据以我们期望的格式显示出来。我们可以使用System.out.printf()语句并将两个占位符%和?实现它。printf()方法可以将下面的参数格式化成指定的格式。5.2占位符为了实现格式化功能,Java为我们提供了多种占位符,可以将各种数据类型“格式化”成指定的字符串。常用的占位符如下:这里要注意,在输出语句中,%代表占位符。如果连续使用两个%%,则需要传入两个对应的数字,否则会将后面的%字符输出到原文中。如果想了解更详细的格式化参数,可以参考JDK文档:java.util.Formatter5.3Case以下是一哥设计的对应本节的代码案例,大家可以练习一下。publicclassDemo01{publicstaticvoidmain(String[]args){//格式化输出//默认输出格式//doubled=88800000;//System.out.println(d);//8.88E7双d=3.1415926;System.out.printf("%.2f\n",d);//保留2位小数3.14System.out.printf("%.4f\n",d);//保留4位小数3.1416//占位符和格式intn=123456789;//%08x,输出16进制数据,不足8位补0System.out.printf("n=%d,hex=%08x",n,n);//注意两个%占位符应该传入两个数字}}
