Java中System.out.println的含义是什么?

这个静态println函数是否在System命名空间的out class中?

命名空间系统{
  上课{
    静态println ...
   }

我怎样才能解释这个名字? 而在JRE中这个函数是在哪里定义的? 在java.lang.System / java.lang.Object

实际上, outSystem类中的一个静态成员(不是.NET中的),是PrintStream一个实例。 printlnPrintStream类的正常(重载)方法。

请参阅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

你会清楚地看到:

Systemjava.lang包中的一个

outSystem类的静态成员 ,是java.io.PrintStream一个实例。

printlnjava.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(); //... } 

printlnprint是属于PrintStream类的两个重载方法。

要访问它们,我们需要这个类的一个实例。

System类上创build一个名为PrintStreamtypes的静态属性

因此,要访问上述方法,我们使用以下语句:

 System.out.println("foo"); System.out.print("foo"); 
 System.out.println("Hello World"); 
  1. System :标准类的名称,它包含封装系统的标准I / O设备的对象。

它包含在 java.lang 。 由于java.lang包默认是在每个Java程序中导入的,因此java.lang是Java API中唯一不需要导入声明的包。

  1. out out表示输出stream(即Command窗口),是System类的静态数据成员。

所以请注意这里System.outSystem类和out – 静态对象,即为什么它只是简单的引用的类名,我们不需要创build任何对象 )。

  1. println println()out对象的方法 ,它将文本string作为参数,并将其显示到标准输出,即在监视器屏幕上

注意
System
out对象
println()方法
记住一个函数(在java函数中被称为方法)总是具有格式function()

Systemjava.lang包中的一个类

outjava.io包中的PrintStream类的static对象

println()PrintStream类中的一个方法

理解这个问题是相当简单的,但为了回答这个问题,我们需要深入挖掘Java本地代码。

  • System是静态类,不能被实例化
  • outSystem定义的引用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(); } 

Systemjava.lang package一个类。 而out是一个PrintStream对象。 很好的解释@ http://lazy-geeks.blogspot.in/2015/01/what-is-systemoutprintln.html

 System.out.println(); 

System是class级

outSystem类中的一个variables,它是一个static和可变types的PrintStream

这里是System类中的outvariables:

 public final static PrintStream out = null; 

你可以在这里看到System实现。

println()PrintStream类中的重载方法。

PrintStream包含三种重载的打印方法,它们是:

  1. print()
  2. println()
  3. 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类中的outvariables引用(指向) PrintStream类( PrintStream对象)的一个实例,当System类加载到应用程序中时,该实例会自动实例化。 PrintStream类有一个名为println()的实例方法,它使参数显示在标准输出设备上。

Systemjava.lang包的一个类, outPrintStream类的对象,也是System类的static数据成员, print()println()PrintStream类的一个实例方法。 它在控制台上提供软输出。

Systemjava.lang包中的一个类。

outSystem类中的静态数据成员和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

PrintStreamtypes的outstatic引用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/PrintSteramout对象; 与getstatic JVM命令一起存储在一个堆栈中。 然后在从名为out的实例调用java/io/PrintStream类的方法println之前将参数推入堆栈。 该方法的参数是(L java/lang/String ;),输出types是void(V)。

 System.out.println 

System – 是java.lang一个类。 outSystem类的static数据成员,并引用PrintStream类的variables。

System是预定义的java.lang包的类。

outprintStream类的static成员,并且与控制台连接。

Println是一个printstream类的方法,它不是static