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

时间:2010-08-04 14:48:01

标签: java system.out

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

namespace System {
  class out {
    static println ...
  }

我该如何解释这个名字?在JRE中定义了这个函数?在java.lang.System / java.lang.Object

19 个答案:

答案 0 :(得分:83)

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

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

你会清楚地看到:

Systemjava.lang包中的

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

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

答案 3 :(得分:24)

  

<强>的System.out.println()

高级别理解

为了理解这一点,我们需要回忆一下java的几个基础:

    java中的
  • dot(。)运算符:在java中。 (点运算符)仅用于调用方法或变量。 所以我们可以说是方法或变量。
  • java中的方法:我们知道方法在方法名之后总是有'(')括号,所以out不能是java中的方法。 因此它的变量和println()是一种方法
  • java中的类名:类名应该以java中的大写字母开头,所以系统是一个类

现在有了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();
//...
}

答案 4 :(得分:7)

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

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

System类上创建名为out PrintStream静态属性

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

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

答案 5 :(得分:4)

System.out.println("Hello World");
  1. System :它是包含对象的标准类的名称 它封装了系统的标准 I / O 设备。
  2. 它包含在 java.lang中。由于默认情况下会在每个java程序中导入java.lang包,因此 java.lang package 是Java API中唯一不需要导入声明的包。

    1. out对象out表示输出流(即Command window)并且是该类的静态数据成员 System
    2. 请注意这里 System.out System -Class&amp; out - 静态对象,即为什么它只是通过classname引用,我们需要不创建任何对象)。

      1. println println()是<{1}}对象的方法 将文本字符串作为参数并将其显示为标准 输出,即显示器屏幕上的

      2. out -Class
        System -static Object
        out -method
        记住一个函数(在java函数中称为方法)总是具有格式 function()

答案 6 :(得分:2)

Systemjava.lang

中的一个类

outstatic包中PrintStream类的java.io对象

println()PrintStream

中的方法

答案 7 :(得分:2)

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

答案 8 :(得分:1)

System.out.println();

System是班级

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

以下是out类中的System变量:

public final static PrintStream out = null;

您可以看到System here的实施。

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

PrintStream包含三种重载的打印方法,即:

  1. print()
  2. println()
  3. printf()
  4. 您可以看到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

答案 9 :(得分:1)

Systemjava.lang package中的一个班级。 outPrintStream个对象。很好的解释@ 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是静态类,无法实例化
  • outSystem
  • 中定义的参考变量
  • println()是用于在标准输出上打印的方法。

我们总是欢迎brief and nice explanation,因为我们可以从这一行声明中学到很多东西!

答案 12 :(得分:0)

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

outstatic类的printStream成员及其与控制台的连接。

Printlnprintstream类的方法,而不是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

Systemjava.lang包中的一个类。

outstatic类的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)

Systemjava.lang包中的一个类。

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