【发布时间】:2021-02-01 04:04:57
【问题描述】:
在我了解编程语言/编译器的过程中,我认为尝试编写 Java 类库的小版本可能会很酷。
我决定从编写自己的 println() 方法开始。不,不是简单调用 println 的方法。
到目前为止我的代码:
package maintest;
import java.io.PrintStream;
import gnu.classpath.SystemProperties;
import gnu.classpath.VMStackWalker;
public class JohnSystem {
public static final PrintStream out = VMSystem.makeStandardOutputStream();
}
所以基本上,我写了一个“新”系统类。现在我注意到关于 OpenJDK 系统类的一些有趣的事情。 Java.lang.System 中包含的 public static final 变量“out”不会像对象通常使用 new 关键字那样被实例化。我试图模仿它的完成方式并相应地编写了上面的代码。
我认为VMSystem 是类库中的另一个类,它有一个静态方法makeStandardOutputStream(),它返回一个PrintStream 对象。
这很好,除了编译器(或者可能是 eclipse?)不识别 VMSystem 并且当我尝试导入在 OpenJDK 上找到的包时,它们也无法识别。
我指的代码在:http://developer.classpath.org/doc/java/lang/System-source.html
所以,基本上我正在尝试找出如何能够使用 VMSystem 方法。是否有我需要下载的软件包?但这并没有什么意义。既然System.out.println() 有效,那么这些包一定已经存在了,不是吗?还是可能是权限/安全问题?
谢谢!
【问题讨论】:
-
SystemI/O 字段have special properties in the JLS that apply only to them。请注意通常,作为 JVM 本身一部分的内部代码(例如VMSystem)随时可能更改,并且经常需要使用非常奇怪的(从 Java 角度来看)技术来提供JVM 平台。
标签: java jvm class-library