输出语句System.out.println()-----解析

时间:2024-03-16 22:10:51

1.eg:

     Object a;

     System.out.println(a);

    1)、调用java.lang.System(类)的 out(“标准”输出流)字段,out是一个 PrintStream 类型的引用变量。

            源码:

                      public final static PrintStream out = null;          --------》在 java.lang.System 里面

           即: PrintStream 类型的引用变量 out 是一个 “  标准的字节输出流  ”。

    2)、PrintStream (java.io.PrintStream)

           PrintStream 是一个“打印流” , 称为“字节输出流”

         补充:另外一种“打印流”是 PrintWriter ,这是一个“字符输出流” 。

     3)、调用类  java.io.PrintStream 的

     public void println(Object x)

           打印 Object , 然后终止该行。

     4)、public void println(Object x) 方法的源码如下:

           public void println(Object x) {
                          String s = String.valueOf(x);
                          synchronized (this) {
                          print(s);
                          newLine();
                          }
          }

      5)、执行 println(Object x ) 方法,所依赖的其他方法:

         (1): public static String valueOf(Object obj) {             ------》 java.lang.String 下的
                           return (obj == null) ? "null" : obj.toString();
                       }

         (2): public String toString() {               -------》  java.lang.Object 下的
                          return getClass().getName() + "@" + Integer.toHexString(hashCode());
                       }

         (3):public void print(String s) {             --------》 java.io.PrintStream下的
                          if (s == null) {
                              s = "null";
                          }
                          write(s);
                      }

          (4):private void write(String s) {          --------》 java.io.PrintStream下的
                                 try {
                                           synchronized (this) {
                                                    ensureOpen();         // 判断当前的输出流是否开着
                                                    textOut.write(s);      // PrintStream 里面的

                                                                                       private BufferedWriter textOut;
                                                    textOut.flushBuffer();  
                                                    charOut.flushBuffer();         // PrintStream 里面的

                                                                                                 private OutputStreamWriter charOut;


                                                    if (autoFlush && (s.indexOf('\n') >= 0))  //  PrintStream 里面的

                                                                                                                       private final boolean autoFlush
                                                        out.flush();
                                          }
                                }catch (InterruptedIOException x) {
                                          Thread.currentThread().interrupt();
                                } catch (IOException x) {
                                          trouble = true;        // PrintStream 里面的  private boolean trouble = false;
                                }
                       }

            (5):private void newLine() {                     --------》 java.io.PrintStream下的
                                     try {
                                                synchronized (this) {
                                                      ensureOpen();                  // 判断当前的输出流是否开着
                                                      textOut.newLine();
                                                      textOut.flushBuffer();
                                                      charOut.flushBuffer();
                                                      if (autoFlush)
                                                      out.flush();
                                                }
                                      } catch (InterruptedIOException x) {
                                               Thread.currentThread().interrupt();
                                      } catch (IOException x) {
                                               trouble = true;
                                       }
                         }

              (6): /** Check to make sure that the stream has not been closed */

                            private void ensureOpen() throws IOException {
                                      if (out == null)
                                          throw new IOException("Stream closed");
                            }

               (7):   Thread.currentThread()

                        解析: java.lang.Thread 里面的   public static Thread currentThread() 方法

                        作用: 返回对当前正在执行的线程对象的引用

               (8):   public void interrupt()      -----------》java.lang.Thread 里面的方法

                        作用:中断线程

      》》执行流程如下图:

输出语句System.out.println()-----解析

  补充:上面代码中出现了:

             synchronized (this) {

             }

            这里涉及到了并发编程中“锁”的问题,详细资料请参阅并发编程的内容。