来自println
命名空间的out
类中的这个静态System
函数是什么?
namespace System { class out { static println ... }
我该如何解释这个名字?在JRE中定义了这个函数?在java.lang.System
/ java.lang.Object
?
答案 0 :(得分:83)
没有。实际上out
是System
类中的静态成员(不是在.NET中),是PrintStream
的实例。 println
是PrintStream
类的正常(重载)方法。
请参阅http://download.oracle.com/javase/6/docs/api/java/lang/System.html#out。
实际上,如果out
/ err
/ in
是类,则会以大写字母(Out
/ Err
/ {{1}命名})由于naming convention(忽略语法)。
答案 1 :(得分:47)
System
是一个类,它有一个公共静态字段out
。所以它更像是
class System
{
public static PrintStream out;
}
class PrintStream
{
public void println ...
}
这有点过于简单化,因为PrintStream
类实际上在java.io
包中,但它足以显示内容的关系。
答案 2 :(得分:26)
检查以下链接:
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html
你会清楚地看到:
System
是java.lang
包中的类。
out
是System
类的静态成员,是java.io.PrintStream
的实例。
println
是java.io.PrintStream
的方法。重载此方法以将消息打印到输出目标,输出目的地通常是控制台或文件。
答案 3 :(得分:24)
<强>的System.out.println()强>
高级别理解
为了理解这一点,我们需要回忆一下java的几个基础:
现在有了java的基本知识,我们知道:
让我们了解更多信息:
输出变量:静态还是实例?
使用类名调用,因此我们知道它的System类的静态变量。
但它调用方法println()方法,因此'out'是引用类型PrintStream的对象。
System类属于java.lang包
class System {
public static final PrintStream out;
//...
}
Prinstream类属于java.io包
class PrintStream{
public void println();
//...
}
答案 4 :(得分:7)
println
和print
是属于PrintStream
类的两个重载方法。
要访问它们,我们需要这个类的实例。
在System
类上创建名为out
PrintStream
的静态属性。
因此,要访问上述方法,我们使用以下语句:
System.out.println("foo");
System.out.print("foo");
答案 5 :(得分:4)
System.out.println("Hello World");
System
:它是包含对象的标准类的名称
它封装了系统的标准 I / O 设备。它包含在包 java.lang
中。由于默认情况下会在每个java程序中导入java.lang
包,因此 java.lang
package 是Java API中唯一不需要导入声明的包。
out
:对象out表示输出流(即Command
window)并且是该类的静态数据成员
System
请注意这里 System.out
( System
-Class&amp; out
- 静态对象,即为什么它只是通过classname引用,我们需要不创建任何对象)。
println
: println()
是<{1}}对象的方法
将文本字符串作为参数并将其显示为标准
输出,即显示器屏幕上的 。 注的
out
-Class
System
-static Object
out
-method
记住一个函数(在java函数中称为方法)总是具有格式 function()
答案 6 :(得分:2)
•System
是java.lang
包
•out
是static
包中PrintStream
类的java.io
对象
•println()
是PrintStream
类
答案 7 :(得分:2)
System
是一类java.lang
个包,out
是PrintStream
类的对象,也是static
类的System
数据成员,print()
和println()
是PrintStream
类的实例方法。
它在控制台上提供软输出。
答案 8 :(得分:1)
System.out.println();
System
是班级
out
是System
类中的变量,它是static
,变量类型为PrintStream
。
以下是out
类中的System
变量:
public final static PrintStream out = null;
您可以看到System
here的实施。
println()
是PrintStream
类中的重载方法。
PrintStream
包含三种重载的打印方法,即:
print()
println()
printf()
您可以看到implementation of PrintStream
here。
您无法实例化System
类,它是Object
的子类,Object
是每个类的父(超类),包括您定义的类。
以下是oracle文档所说的内容:
public final class System extends Object
System
类包含几个有用的类字段和方法。它 无法实例化。
System
类提供的设施中有标准输入, 标准输出和错误输出流;外部访问 定义的属性和环境变量;一种加载文件的方法 和图书馆;以及一种快速复制部分内容的实用方法 一个数组。自: JDK1.0
如果你不知道what is meant by instantiate, read this questioh。这是C#问题,但概念是一样的。
此外,What is the difference between an Instance and an Object?
答案 9 :(得分:1)
System
是java.lang package
中的一个班级。 out
是PrintStream
个对象。很好的解释@ http://lazy-geeks.blogspot.in/2015/01/what-is-systemoutprintln.html
答案 10 :(得分:1)
因为使用System
类名本身调用out,而不是类(对象)的实例,所以out
必须是属于类System
的静态变量。 out
必须是类的实例,因为它正在调用方法println()
。
// the System class belongs to java.lang package
class System {
public static final PrintStream out;
}
class PrintStream {
public void println();
}
答案 11 :(得分:1)
理解这个问题非常简单,但要回答这个问题,我们需要深入研究Java本机代码。
System
是静态类,无法实例化out
是System
println()
是用于在标准输出上打印的方法。我们总是欢迎brief and nice explanation,因为我们可以从这一行声明中学到很多东西!
答案 12 :(得分:0)
System
是预定义的java.lang
包类。
out
:是static
类的printStream
成员及其与控制台的连接。
Println
:是printstream
类的方法,而不是static
。
答案 13 :(得分:0)
System
- 本质上属于final
的类。 public final class System{}
。属于java.lang
包
out
- static
PrintStream
println()
- static
课程中的非PrintStream
方法。
PrintStream
属于java.io
个包。
为了更好地了解它,您可以访问:How System.out.println() Works In Java
答案 14 :(得分:0)
System.out.println
System
是java.lang
包中的一个类。
out
是static
类的System
数据成员,并引用PrintStream
类的变量。
答案 15 :(得分:0)
关于System
的javadoc,这是文档所说的内容:
public final class System
extends Object
The System class contains several useful class fields and methods. It cannot be instantiated.
Among the facilities provided by the System class are standard input, standard output, and error output streams; access to externally defined properties and environment variables; a means of loading files and libraries; and a utility method for quickly copying a portion of an array.
Since:
JDK1.0
关于System.out
public static final PrintStream out
The "standard" output stream class Prinstream belongs to java.io package. This stream is already open and ready to accept output data.
When the JVM is initialized, the method initializeSystemClass() is called that does exactly what it’s name says – it initializes the System class and sets the out variable. The initializeSystemClass() method actually calls another method to set the out variable – this method is called setOut().
Typically this stream corresponds to display output or another output destination specified by the host environment or user.
关于println();
class PrintStream{
public void println();
}
对于简单的独立Java应用程序,编写一行输出数据的典型方法是:
System.out.println(data);
答案 16 :(得分:0)
System
是java.lang
包中的一个类。
out
是System
类中的静态数据成员和PrintStream
类的引用变量。
Println()
是PrintStream
类的正常(重载)方法。
答案 17 :(得分:0)
系统是java类。
out 是实例,也是PrintStream的静态成员。
println 是PrintStream的方法。
答案 18 :(得分:0)
Java代码中的System.out.println(“...”)被转换为JVM。查看JVM让我更好地了解了幕后的情况。
从书Programming form the Java Virtual Machine开始。 此代码是从https://github.com/ymasory/programming-for-the-jvm/blob/master/examples/HelloWorld.j复制的。
这是JVM源代码。
.class public HelloWorld
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 2
.limit locals 1
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello, world"
invokevirtual java/io/PrintStream/println
(Ljava/lang/String;)V
return
.end method
.end class
作为“JVM不允许对内存进行字节级访问”,类型为L out
的{{1}}对象;存储在具有java/io/PrintSteram
JVM命令的堆栈中。
然后,在从名为getstatic
的实例调用println
类的方法java/io/PrintStream
之前,将参数推送到堆栈上。方法的参数是(L out
;),输出类型是void(V)。