【问题标题】:What's the meaning of System.out.println in Java?Java 中 System.out.println 的含义是什么?
【发布时间】:2010-08-04 14:48:01
【问题描述】:

这是来自System 命名空间的out 类中的静态println 函数吗?

命名空间系统{ 下课{ 静态打印... }

我该如何解释这个名字?这个函数在 JRE 的什么地方定义?在java.lang.System/java.lang.Object?

【问题讨论】:

  • JDK 是开源的。选择一个 IDE,包括 JDK 源代码,然后按 Ctrl+单击您的方式通过 System.out :)
  • @prosseek,我建议你使用 netbeans,只需输入 System.out.println();在它上面并将鼠标光标放在 System 上并按下控制键和鼠标左键单击,您将获得 System 类的定义,然后一切都将被清除... :)

标签: java system.out


【解决方案1】:

没有。实际上outSystem 类中的一个静态成员(与.NET 不同),是PrintStream 的一个实例。而printlnPrintStream 类的普通(重载)方法。

http://download.oracle.com/javase/6/docs/api/java/lang/System.html#out

实际上,如果out/err/in是类,由于naming convention(忽略语法),它们将用大写字符(Out/Err/In)命名.

【讨论】:

  • +1 用于引用 Java 命名约定,因为提问者来自其他语言。
  • 还要注意 System.java 有点误导,因为 in、out 和 err 是由 "magic" 设置的。
  • @Dimitris:呵呵,因为这是 Google 的第一次成功。更新到 SE 6。
  • “不像.NET”是什么意思?
  • @Fabian:.net BCL 有一个System 命名空间。如果我们暂时忽略命名约定,System.out 很可能是 System 命名空间中名为 out 的类,正如 OP 首先考虑的那样。 Java 不是这样的。
【解决方案2】:

System 是一个类,它有一个公共静态字段out。所以更像是

class System 
{
    public static PrintStream out;
}

class PrintStream
{
    public void println ...
}

这有点过于简单了,因为PrintStream 类实际上是在java.io 包中,但它足以显示事物之间的关系。

【讨论】:

  • @yogeshprajapati:这超出了本问答的范围。你可能应该问一个新问题。
  • 很好的解释
【解决方案3】:

System.out.println()

高级理解

为了理解这一点,我们需要回顾一下 java 的一些基础知识:

  • java 中的点 (.) 运算符:在 java 中。 (点运算符)仅用于调用方法或变量。 所以我们可以说是方法还是变量。
  • java 中的方法:我们知道方法名称后面总是有括号'( )',所以 out 不能是 java 中的方法。 所以它是一个变量,而 println() 是一个方法
  • java 中的类名:java 中类名最好以大写字母开头,所以 System 是一个类

现在有了我们所知道的java基础知识:

  • 系统是一个类
  • out 是一个变量
  • println() 是一种方法

让我们了解更多详情:

输出变量:静态还是实例?

  • 使用类名调用,所以我们知道它的System类的静态变量。

  • 但它调用方法 println() 方法,所以“out”是引用类型 PrintStream 的对象。

System 类属于 java.lang 包

class System {
  public static final PrintStream out;
  //...
}

Prinstream 类属于 java.io 包

class PrintStream{
public void println();
//...
}

在我的 youtube 上解释了什么是 System.out.println

【讨论】:

  • 最佳答案。谢谢
【解决方案4】:

查看以下链接:

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html

你会清楚地看到:

Systemjava.lang 包中的一个

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

printlnjava.io.PrintStream方法。此方法被重载以将消息打印到输出目标,通常是控制台或文件。

【讨论】:

    【解决方案5】:

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

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

    System 类上创建一个名为outPrintStream 类型的静态属性

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

    System.out.println("foo");
    System.out.print("foo");
    

    【讨论】:

      【解决方案6】:
      System.out.println("Hello World");
      
      1. System:包含对象的标准类的名称 它封装了系统的标准 I/O 设备。

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

      1. out:对象out代表输出流(即Command window) 并且是类的静态数据成员 System

      所以请注意这里 System.out (System -Class & out- 静态对象,即为什么它只是由类名引用而我们不需要创建任何对象)。

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

      注意
      System -Class
      out -static 对象
      @987654336 @ -method
      记住一个函数(在java中函数被称为方法)总是有格式function()

      【讨论】:

        【解决方案7】:

        Systemjava.lang 包中的一个类

        outjava.io 包中PrintStream 类的static 对象

        println()PrintStream 类中的一个方法

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

            这个问题很容易理解,但要回答这个问题,我们需要更深入地研究 Java 原生代码。

            • System 是静态类,不能实例化
            • out 是在System 中定义的引用变量
            • println() 是用于在标准输出上打印的方法。

            我们随时欢迎brief and nice explanation,因为我们可以从这句话本身中学到很多东西!

            【讨论】:

              【解决方案10】:

              因为 out 是用 System 类名本身调用的,而不是类(对象)的实例,所以 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】:

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

                【讨论】:

                  【解决方案12】:
                  System.out.println();
                  

                  System 是类

                  outSystem类中的一个变量,它是一个static,变量类型是PrintStream

                  这是System 类中的out 变量:

                  public final static PrintStream out = null;
                  

                  你可以看到System here的实现。

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

                  PrintStream 包含三种重载打印方法,分别是:

                  1. print()
                  2. println()
                  3. 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?

                  如果你不知道what is meant by overload read this quesiotn

                  【讨论】:

                    【解决方案13】:

                    Systemjava.lang 包中的一个类。

                    outSystem类中的静态数据成员和PrintStream类的引用变量。

                    Println()PrintStream 类的普通(重载)方法。

                    【讨论】:

                    • 我认为你的意思是被覆盖,而不是重载。
                    【解决方案14】:

                    来自关于 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);
                    

                    【讨论】:

                      【解决方案15】:

                      System是java类。

                      out 是 PrintStream 的实例,也是静态成员。

                      println是PrintStream的方法。

                      【讨论】:

                        【解决方案16】:

                        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 不允许字节级访问内存”,类型为 Ljava/io/PrintSteramout 对象;使用getstatic JVM 命令存储在堆栈中。 然后将参数压入堆栈,然后从名为out 的实例调用java/io/PrintStream 类的方法println。该方法的参数是(Ljava/lang/String;),输出类型是void(V)。

                        【讨论】:

                          【解决方案17】:

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

                          out:static 类的printStream 成员,它与控制台连接。

                          Println:printstream 类的方法,而不是 static

                          【讨论】:

                            【解决方案18】:
                            System.out.println
                            

                            Systemjava.lang 包中的一个类。

                            outSystem 类的 static 数据成员,并引用 PrintStream 类的变量。

                            【讨论】:

                              【解决方案19】:

                              System - 本质上是final 的类。 public final class System{}。属于java.lang

                              out - static PrintStream 类型的引用变量

                              println() - PrintStream 类中的非 static 方法。 PrintStream 属于 java.io 包。

                              为了更好地理解它,您可以访问:How System.out.println() Works In Java

                              【讨论】:

                              • 您好,欢迎来到堆栈溢出!这个问题已经有了一个被广泛接受的答案。虽然发布旧问题的答案是可以的,但请确保它具有高度相关性并且它贡献了一些新的东西。另外,请记住,不鼓励发布指向外部网站的链接,因为链接可能会过时。编码愉快!
                              猜你喜欢
                              • 2010-10-31
                              • 1970-01-01
                              • 2012-02-02
                              • 1970-01-01
                              • 1970-01-01
                              • 2013-12-14
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多