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 里面的方法
作用:中断线程
》》执行流程如下图:
补充:上面代码中出现了:
synchronized (this) {
}
这里涉及到了并发编程中“锁”的问题,详细资料请参阅并发编程的内容。