首先感到遗憾的是,这是一个非常基本的问题,我宣传我仍然是一个代码猴.我在接受采访时被要求阐明System.out.println(); 我解释了以下方式
//this class belongs to java.lang package
class System{
public static PrintStream out;
}
//this class belongs to java.io package
class PrintStream{
public void println..
}
Run Code Online (Sandbox Code Playgroud)
我已经解释过System.out是有效的,因为这是我们在java中访问静态变量的方式,而out是PrintStream的一个对象,因此我们可以访问它的方法.
System.out.pritnln();
Run Code Online (Sandbox Code Playgroud)
他让我模拟一个类似的程序,我跟踪它并没有用,因为System.out返回null
我的问题是在java中实例化的对象在哪里?如果我没错,它是一个预定义的对象吗?应该是什么细致的解释.
从技术上讲,我们应该叫什么?是PrintStream类型的变量还是应该将其称为PrintStream类型的对象?
Jiv*_*ngs 21
System.out初始化null为实例化类时.这是由nullPrintStream()方法设置的System.java,它只返回null.
当JVM初始化时,它会调用该initializeSystemClass()方法.此方法调用native方法setOut0()这设定out变量为适当的值.
这可能看起来很奇怪,但由于以下原因,这是必要的操作:
out不能静态设置为值,因为System需要是第一个加载的类之一(之前PrintStream). out必须final使其值不能被用户直接覆盖.out不能静态设置,并且是最终的,我们必须使用native方法覆盖语言的语义setOut0().我希望这有助于你理解.
| 归档时间: |
|
| 查看次数: |
12844 次 |
| 最近记录: |