java system.in_Java IO System.in 与 System.out

更多 Java IO & NIO方面的文章,请参见文集《Java IO & NIO》

System 类

所在包:java.lang.System

构造方法为私有方法,因此不能被实例化

类名被 final 修饰,因此不能被继承:public final class System {

System.in 标准输入流

/**

* The "standard" input stream. This stream is already

* open and ready to supply input data. Typically this stream

* corresponds to keyboard input or another input source specified by

* the host environment or user.

*/

public final static InputStream in = null;

读取 System.in

用 BufferedReader 封装:

public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String s = br.readLine();

System.out.println(s);

}

System.out 标准输出流

* The "standard" output stream. This stream is already

* open and ready to accept output data. Typically this stream

* corresponds to display output or another output destination

* specified by the host environment or user.

*

* For simple stand-alone Java applications, a typical way to write

* a line of output data is:

*

 
  

* System.out.println(data)

*

*

* See the println methods in class PrintStream.

*

* @see java.io.PrintStream#println()

* @see java.io.PrintStream#println(boolean)

* @see java.io.PrintStream#println(char)

* @see java.io.PrintStream#println(char[])

* @see java.io.PrintStream#println(double)

* @see java.io.PrintStream#println(float)

* @see java.io.PrintStream#println(int)

* @see java.io.PrintStream#println(long)

* @see java.io.PrintStream#println(java.lang.Object)

* @see java.io.PrintStream#println(java.lang.String)

*/

public final static PrintStream out = null;

System.in 与 System.out 何时被构造?

System 类中有方法 initializeSystemClass(),在线程初始化后调用该方法,用于构造 System 类的相关属性,包括 in 和 out:

/**

* Initialize the system class. Called after thread initialization.

*/

private static void initializeSystemClass() {

// VM might invoke JNU_NewStringPlatform() to set those encoding

// sensitive properties (user.home, user.name, boot.class.path, etc.)

// during "props" initialization, in which it may need access, via

// System.getProperty(), to the related system encoding property that

// have been initialized (put into "props") at early stage of the

// initialization. So make sure the "props" is available at the

// very beginning of the initialization and all system properties to

// be put into it directly.

props = new Properties();

initProperties(props); // initialized by the VM

// There are certain system configurations that may be controlled by

// VM options such as the maximum amount of direct memory and

// Integer cache size used to support the object identity semantics

// of autoboxing. Typically, the library will obtain these values

// from the properties set by the VM. If the properties are for

// internal implementation use only, these properties should be

// removed from the system properties.

//

// See java.lang.Integer.IntegerCache and the

// sun.misc.VM.saveAndRemoveProperties method for example.

//

// Save a private copy of the system properties object that

// can only be accessed by the internal implementation. Remove

// certain system properties that are not intended for public access.

sun.misc.VM.saveAndRemoveProperties(props);

lineSeparator = props.getProperty("line.separator");

sun.misc.Version.init();

FileInputStream fdIn = new FileInputStream(FileDescriptor.in);

FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);

FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);

setIn0(new BufferedInputStream(fdIn));

setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));

setErr0(newPrintStream(fdErr, props.getProperty("sun.stderr.encoding")));

// Load the zip library now in order to keep java.util.zip.ZipFile

// from trying to use itself to load this library later.

loadLibrary("zip");

// Setup Java signal handlers for HUP, TERM, and INT (where available).

Terminator.setup();

// Initialize any miscellenous operating system settings that need to be

// set for the class libraries. Currently this is no-op everywhere except

// for Windows where the process-wide error mode is set before the java.io

// classes are used.

sun.misc.VM.initializeOSEnvironment();

// The main thread is not added to its thread group in the same

// way as other threads; we must do it ourselves here.

Thread current = Thread.currentThread();

current.getThreadGroup().add(current);

// register shared secrets

setJavaLangAccess();

// Subsystems that are invoked during initialization can invoke

// sun.misc.VM.isBooted() in order to avoid doing things that should

// wait until the application class loader has been set up.

// IMPORTANT: Ensure that this remains the last initialization action!

sun.misc.VM.booted();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值