System.out.println(“测试”);

快速开发师 发布于 2018/07/18 15:06
阅读 261
收藏 0

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

System.out.println(“测试”);

在eclipse调试此代码,立刻在控制台看到输出了“测试”二字,但为什么会在eclipse的控制台输出;

而在cmd命令窗口运行java 执行代码的时候会在窗口打印出“测试”

也就是说在不同的平台窗口都是可以独立打印出来的,那么这是怎么做到的??我自己能做到吗?怎么样实现自己的控制台?

看了下out对象的实现类是java.io.PrintStream也就是打印输出流,这个类要实例化,需要引入一个原始输入流参数OutputStream, 我想可能是eclipse 在运行java命令来执行程序的时候会优先实例化System这个类的静态属性对象,在构造out对象的时候,在PrintStream的构造参数需要一个OutputStream原始输入流的时候,自己实现了OutputStream接口,实现了所有的write方法和print方法,从而把要输出的字节数据输出到了自己的SWT窗口控件之中,不知道是不是这样的?欢迎各位批评指正!

但是也有一点疑问,eclipse通过实现自己的OutputStream对象来打印到自己的java控制台,说白了这个控制台的控件是个swt窗口是jvm的皮肤。但cmd的window窗口呢,明显是另外一套程序的界面,这个要打印的字符串是怎么“流”到上面去的,难道是像文件输出流那样最终是调用的本地方法吗?其PrintStream依赖的OutputStream原始对象难道是像FileOutputStream一样基于本地native方法来读写磁盘一样的流?茫然!

上面说到的System.out对象内部引入了一个OutputStream参数,而这个参数最终是赋值给了一个protected访问限制的成员变量,而对于protected我无法拿到,所以我现在是无论如何也猜不到当在eclipse控制台打印的时候OutputStream的实现类是什么,而在cmd的window窗口打印的时候OutputStream的实现类又是什么。

加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部