Java中System.out.println的含义是什么?
这个静态println
函数是否在System
命名空间的out
class中?
命名空间系统{ 上课{ 静态println ... }
我怎样才能解释这个名字? 而在JRE中这个函数是在哪里定义的? 在java.lang.System
/ java.lang.Object
?
实际上, out
是System
类中的一个静态成员(不是.NET中的),是PrintStream
一个实例。 println
是PrintStream
类的正常(重载)方法。
请参阅http://download.oracle.com/javase/6/docs/api/java/lang/System.html#out 。
实际上,如果out
/ err
/ in
是类,由于命名约定 (忽略语法),它们将用大写字母( Out
/ Err
/ In
) 命名 。
System
是一个类,有一个公共静态字段。 所以更像
class System { public static PrintStream out; } class PrintStream { public void println ... }
这只是一个简单的过度简化,因为PrintStream
类实际上是在java.io
包中,但它足以显示出东西的关系。
检查以下链接:
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
一个方法 。 这个方法被重载以打印消息到输出目的地,这通常是一个控制台或文件。
的System.out.println()
高层次的理解
为了理解这个,我们需要回忆一下java的一些基础知识:
- 在java中的点(。)运算符:在java中。 (点运算符)仅用于调用方法或variables。 所以我们可以说是无论是方法还是variables。
- 在java中的方法:我们知道方法名后面总是有括号'()',所以out在java中不能是方法。 所以出它的一个variables和println()是一种方法 。
- java中的类名:类名应该以java中的大写字母开头, 所以System是一个类 。
现在有了基本的Java知识,我们知道:
- 系统是一个类
- out是一个variables
- println()是一种方法
让我们来了解更多细节:
出variables :静态还是实例?
-
使用类名来调用,所以我们知道它的System类的静态variables。
-
但是它调用方法println()方法,所以'out'是引用typesPrintStream的一个对象。
System类属于java.lang包
class System { public static final PrintStream out; //... }
Prinstream类属于java.io包
class PrintStream{ public void println(); //... }
println
和print
是属于PrintStream
类的两个重载方法。
要访问它们,我们需要这个类的一个实例。
在System
类上创build一个名为PrintStream
types的静态属性 。
因此,要访问上述方法,我们使用以下语句:
System.out.println("foo"); System.out.print("foo");
System.out.println("Hello World");
-
System
:标准类的名称,它包含封装系统的标准I / O设备的对象。
它包含在包 java.lang
。 由于java.lang
包默认是在每个Java程序中导入的,因此java.lang
包是Java API中唯一不需要导入声明的包。
-
out
: out表示输出stream(即Command窗口),是System
类的静态数据成员。
所以请注意这里System.out
( System
类和out
– 静态对象,即为什么它只是简单的引用的类名,我们不需要创build任何对象 )。
-
println
:println()
是out
对象的方法 ,它将文本string作为参数,并将其显示到标准输出,即在监视器屏幕上 。
注意
System
类
out
对象
println()
方法
记住一个函数(在java函数中被称为方法)总是具有格式function()
System
是java.lang
包中的一个类
out
是java.io
包中的PrintStream
类的static
对象
println()
是PrintStream
类中的一个方法
理解这个问题是相当简单的,但为了回答这个问题,我们需要深入挖掘Java本地代码。
-
System
是静态类,不能被实例化 -
out
是System
定义的引用variables -
println()
是用于在标准输出上打印的方法。
总是欢迎一个简短而好的解释 ,因为我们可以从这一行的陈述本身学到很多东西!
因为out是使用System
类名称本身调用的,而不是一个类(一个对象)的实例,所以out
必须是一个属于类System
的静态variables。 out
必须是一个类的实例,因为它正在调用println()
方法。
// the System class belongs to java.lang package class System { public static final PrintStream out; } class PrintStream { public void println(); }
System
是java.lang package
一个类。 而out
是一个PrintStream
对象。 很好的解释@ http://lazy-geeks.blogspot.in/2015/01/what-is-systemoutprintln.html
System.out.println();
System
是class级
out
是System
类中的一个variables,它是一个static
和可变types的PrintStream
。
这里是System
类中的out
variables:
public final static PrintStream out = null;
你可以在这里看到System
实现。
println()
是PrintStream
类中的重载方法。
PrintStream
包含三种重载的打印方法,它们是:
-
print()
-
println()
-
printf()
你可以在这里看到PrintStream
实现 。
你不能实例化System
类,它是Object
子类,而Object
是每个类(包括你定义的类)的父类(父类)。
这是oracle文档所说的:
public final class System extends Object
System
类包含几个有用的类字段和方法。 它不能被实例化。
System
类提供的function包括标准input,标准输出和错误输出stream; 访问外部定义的属性和环境variables; 一种加载文件和库的方法; 以及用于快速复制数组的一部分的实用方法。从以下版本开始:JDK1.0
如果你不知道实例化的意思,请阅读这个问题 。 这是C#的问题,但概念是一样的。
另外, 一个实例和一个对象有什么区别?
如果你不知道什么是超载的意思阅读这个quesiotn 。
System
是一个类。
outvariables(以上称为System.out
)是System类的一个类variables。
PrintStream
类位于一个用于为Java提供streamI / Ofunction的类包中。
System
类中的out
variables引用(指向) PrintStream
类( PrintStream
对象)的一个实例,当System
类加载到应用程序中时,该实例会自动实例化。 PrintStream
类有一个名为println()
的实例方法,它使参数显示在标准输出设备上。
System
是java.lang
包的一个类, out
是PrintStream
类的对象,也是System
类的static
数据成员, print()
和println()
是PrintStream
类的一个实例方法。 它在控制台上提供软输出。
System
是java.lang
包中的一个类。
out
是System
类中的静态数据成员和PrintStream
类的引用variables。
Println()
是PrintStream
类的正常(重载)方法。
从关于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);
System
级是final
的性质。 public final class System{}
。 属于java.lang
包
PrintStream
types的out
– static
引用variables
println()
– PrintStream
类中的非static
方法。 PrintStream
属于java.io
包。
为了更好地理解它,您可以访问: System.out.println()如何在Java中工作
系统是java类。
out是PrintStream的实例,也是静态成员。
println是PrintStream的方法。
Java代码中的System.out.println(“…”)被转换成JVM。 研究JVM让我更好地理解了后台正在发生的事情。
从Java虚拟机编程的书。 此代码从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不允许字节级访问内存”typesL java/io/PrintSteram
的out
对象; 与getstatic
JVM命令一起存储在一个堆栈中。 然后在从名为out
的实例调用java/io/PrintStream
类的方法println
之前将参数推入堆栈。 该方法的参数是(L java/lang/String
;),输出types是void(V)。
System.out.println
System
– 是java.lang
一个类。 out
是System
类的static
数据成员,并引用PrintStream
类的variables。
System
:是预定义的java.lang
包的类。
out
:是printStream
类的static
成员,并且与控制台连接。
Println
:是一个printstream
类的方法,它不是static
。