import java.io.*;
public class ch7_1
{
public static void main(String args[])throws IOException
{
char a ='A';
System.out.write(a);
System.out.write('\n');//这句为什么一定要加上啊?
}
}

解决方案 »

  1.   

    不加就用
    System.out.println(a);
      

  2.   

    \n转义是回车
    \n 回车(\u000a) 
    \t 水平制表符(\u0009) 
    \b 空格(\u0008) 
    \r 换行(\u000d) 
    \f 换页(\u000c) 
    \' 单引号(\u0027) 
    \" 双引号(\u0022) 
    \\ 反斜杠(\u005c) 
    .....
      

  3.   

    System.out是一个PrintStream类的实例(在System类中作为静态变量),write(int ~)是将接收到的字节写入缓存,因此最后需要调用它的flush()方法才可将缓存中的数据刷出,才能在控制台上看到结果“A”,此处暂时我能找到的解释是:此方法接收到了‘\n’,等同于判定收到了一个回车,因此write(int ~)在内部自动调用了flush()。(此解释有待考证,我本人也会继续查下去)
      

  4.   

    先用System.out.println();来测试  ,然后用System.out.write();
      

  5.   

    查看帮助文档发现:
    public void write(int b)
    将指定的字节写入此流。如果字节为新行且启用了自动刷新,则调用 flush 方法。 
    public void write(byte[] buf,
                      int off,
                      int len)
    将 len 字节从指定的初始偏移量为 off 的 byte 数组写入此流。如果启用自动刷新,则调用 flush 方法。 write方法的两种用法和说明都是差不多的,一开始我也同意11楼的观点,也觉得应该是这样的,但发现使用第二种方法不用输出回车也能在控制台输出,代码如下:
    class test{
     public static void main(String args[]){
    String a="ABCD";
    System.out.write(a.getBytes(),0,4);
    }
    }
    不需要输出换行符,也能正常输出:ABCD
    再者,即然觉得是因为“写入换行符或字节('\n') 且启用了自动刷新,则调用 flush 方法”(一开始认为使用System.out输出流java的默认机制是启用自动刷新的),所以我尝试用以下代码关闭自动刷新,同样按楼主的代码输出A和换行符,代码如下:
    class test{
     public static void main(String args[]){
    char a='A';
    rintStream pw=new PrintStream(System.out,false);
    pw.write(a);
    pw.write('\n');
    }
    }
    理论上如果关闭了自动刷新机制,没有刷新输出缓冲区就不能输出写入字节的,却发现仍然可以输出A。
    总之,发现write的第一种用法,只要后面调用比如它的第二种方法、print、println、输出换行符或字节'\n'、刷新缓冲流、关闭缓冲流中的任一一种方法都可以输出字节到控制台。
    至于原因,可能涉及到比较底层的java实现机制或控制台输出显示机制,所以不甚了解而且write的第一种用法是很不实用的,所以如果是新手也没有必要去深究它,可以完全使用比较实用的print或者println方法来替代它
      

  6.   

    查看帮助文档发现: 
    public void write(int b) 
    将指定的字节写入此流。如果字节为新行且启用了自动刷新,则调用 flush 方法。 
    public void write(byte[] buf, 
                      int off, 
                      int len) 
    将 len 字节从指定的初始偏移量为 off 的 byte 数组写入此流。如果启用自动刷新,则调用 flush 方法。 write方法的两种用法和说明都是差不多的,一开始我也同意11楼的观点,也觉得应该是这样的,但发现使用第二种方法不用输出回车也能在控制台输出,代码如下: 
    class test{ 
    public static void main(String args[]){ 
    String a="ABCD"; 
    System.out.write(a.getBytes(),0,4); 


    不需要输出换行符,也能正常输出:ABCD 
    再者,即然觉得是因为“写入换行符或字节('\n') 且启用了自动刷新,则调用 flush 方法”(一开始认为使用System.out输出流java的默认机制是启用自动刷新的),所以我尝试用以下代码关闭自动刷新,同样按楼主的代码输出A和换行符,代码如下: 
    class test{ 
    public static void main(String args[]){ 
    char a='A'; 
    rintStream pw=new PrintStream(System.out,false); 
    pw.write(a); 
    pw.write('\n'); 


    理论上如果关闭了自动刷新机制,没有刷新输出缓冲区就不能输出写入字节的,却发现仍然可以输出A。 
    总之,发现write的第一种用法,只要后面调用比如它的第二种方法、print、println、输出换行符或字节'\n'、刷新缓冲流、关闭缓冲流中的任一一种方法都可以输出字节到控制台。 
    至于原因,可能涉及到比较底层的java实现机制或控制台输出显示机制,所以不甚了解 而且write的第一种用法是很不实用的,所以如果是新手也没有必要去深究它,可以完全使用比较实用的print或者println方法来替代它