解读java.lang.System

public final class System {
    private System() {}

    public final static PrintStream out = getConsoleOutput();
    private static PrintStream getConsoleOutput() {
        return new PrintStream(new SystemOutputStream());
    }

    public final static PrintStream err = out;
    public static native long currentTimeMillis();

    public static native void arraycopy(Object src, int src_position,
                                        Object dst, int dst_position,
                                        int length);

    public static native int identityHashCode(Object x);

    public static String getProperty(String key) {
        if (key == null) {
            throw new NullPointerException("key can't be null");
        }
        if (key.equals("")) {
            throw new IllegalArgumentException("key can't be empty");
        }
        return getProperty0(key);
    }

    private native static String getProperty0(String key);

    public static void exit(int status) {
        Runtime.getRuntime().exit(status);
    }

    public static void gc() {
        Runtime.getRuntime().gc();
    }
}

——————————————-

System.out使用SystemOutputStream。我们看看它是怎样的:

public class SystemOutputStream extends OutputStream {
    synchronized public void write(int c) throws IOException {
        putchar((char) c);
    }

    private static native void putchar(char c);
}
  1.  可以看到跟C里面的putchar是一样的,实际上是调用C的putchar。
  2. System是静态类。提供系统的便利方法。
  3. System没有输入流。注意手机并没有控制台,像window下的dos或者linux的bash shell。没有该方面的功能。
  4. 当程序运行在手机上,调用System.out.println()是不会被显示的。只仅仅调试的时候才有控制台。但该控制台只能输出。