Java system.out.println() 方法

Mohammad Irfan 2023年1月30日 2021年10月2日
  1. 什么是 System.out.println() 方法
  2. System.out.println() 是如何工作的
  3. toString()print() 方法中的作用
  4. 概括
Java system.out.println() 方法

本教程介绍了 System.out.println() 方法在 Java 中的工作原理,并列出了一些示例代码来理解该主题。

System.out.print() 是一种非常常用的打印到控制台或标准输出的方法。这种方法有时称为打印线方法。除了打印到控制台之外,println() 方法将光标移动到一个新行。

在本教程中,我们将尝试了解此方法的内部工作原理。

什么是 System.out.println() 方法

  • System.out.println() 可以分为三个部分。
  • Systemjava.lang 包的最后一个类,它在 JVM 启动时自动初始化initializeSystemClass() 用于初始化它。
  • System 类包含 PrintStream 类的实例。这个实例变量被称为 out。它使用修饰符 publicstaticfinal 定义。
class System
{
	public static final PrintStream out;
    //More Code Below
}

PrintStream 类包含 print()println() 方法。这些方法是重载的。

class PrintStream
{
    public void print(argument)
    {
        //implementation
    }
    public void println()
    {
        //implementation
    }
    //Overloaded print() and println() methods below
}

因此,System.out 为我们提供了 PrintStream 类的 out 实例变量。然后我们可以在这个实例变量上调用 print()println() 方法。

System.out.println() 是如何工作的

  • PrintStream 类包含多个重载的 print()println() 方法。它们在接受的参数类型上有所不同。
  • 所有这些的返回类型都是无效的。
  • 所有原始类型都存在重载方法。
  • 它还包含一个用于打印字符串的重载方法和另一个用于对象的重载方法。

下面的代码演示了重载的 println() 方法的工作。

public class PrintDemo
{
	public static void main(String args[])
	{
		int i = 10;
		short s = 10;
		long l = 10;
		char c = 'A';
		char[] charArr = {'A', 'B', 'C'};
		boolean bool = true;
		double d = 10.0;
		float f = 10.0f;
		String str = "hello";
		Object o = new Object();
		
		System.out.println();//terminate the current line
		System.out.println(i);//print integer
		System.out.println(s);//print short
		System.out.println(l);//print long
		System.out.println(c);//print char
		System.out.println(charArr);//print char array
		System.out.println(bool);//print boolean
		System.out.println(d);//print double
		System.out.println(f);//print float
		System.out.println(str);//print String
		System.out.println(o);//print Object
	}
}

输出:

10
10
10
A
ABC
true
10.0
10.0
hello
java.lang.Object@433c675d

传递给 println() 方法的参数

  • 初学者可能认为 print()println() 方法采用可变数量的参数 (varargs),但事实并非如此。
  • 例如,在下面的代码中,我们试图打印一个整数、一个字符串和一个字符。
public class PrintDemo
{
	public static void main(String args[])
	{
		int i = 10;
		String s = "hello";
		char c = 'O';
		System.out.println(i + s + c);
	}
}

输出:

10helloO
  • 但我们没有传递三个不同的参数。逗号分隔方法的参数。
  • 相反,它们使用 println() 方法中的 + 运算符连接在一起。
  • 与字符串一起使用的 + 运算符将导致字符串连接并返回一个字符串。
  • 在上面的代码中,整数首先与字符串连接,结果字符串再次与 char 变量连接。

另一件需要注意的是,传递给方法的参数是从左到右计算的。因此,如果传递的前两个变量是整数,则进行正常的算术加法,并将加法结果与字符串连接起来。

public class PrintDemo
{
	public static void main(String args[])
	{
		System.out.println(10 + 10 + "hello");//first integer addition and then string concatenation
	}
}

输出:

20hello

但是如果字符串后面还有两个整数,就会发生字符串连接。

public class PrintDemo
{
	public static void main(String args[])
	{
		System.out.println(10 + 10 + "hello" + 1 + 1);//20hello11 not 20hello2
	}
}

输出:

20hello11

我们可以从左到右应用下面显示的规则来计算输出。如果不存在字符串,则进行正常的算术加法。

(any data type + string) = (string + any data type) = (concatenated string)

toString()print() 方法中的作用

print()println() 方法隐式调用参数的 toString() 方法。它将参数转换为字符串。如果我们想以特定方式打印用户定义的类实例,这非常有用。

我们可以覆盖我们类中的 toString() 方法,以不同的格式打印我们的对象。以下示例演示了这一点。

示例:不覆盖 toString() 方法。

class Demo
{
	String field1;
	String field2;
	
	Demo(String f1, String f2)
	{
		this.field1 = f1;
		this.field2 = f2;
	}
}
public class PrintDemo
{
	public static void main(String args[])
	{
		Demo d = new Demo("f1", "f2");
		System.out.print(d);
	}
}

输出:

Demo@433c675d

示例:在重写 toString() 方法之后。

class Demo
{
	String field1;
	String field2;
	Demo(String f1, String f2)
	{
		this.field1 = f1;
		this.field2 = f2;
	}
	@Override
	public String toString()
	{
		return field1 + " " + field2;	
	}
}
public class PrintDemo
{
	public static void main(String args[])
	{
		Demo d = new Demo("f1", "f2");
		System.out.print(d);
	}
}

输出:

f1 f2

概括

print()println() 方法是 PrintStream 类的一部分。它们是通过使用 System.out 实例变量访问的。这些方法被重载以处理不同的参数类型。请记住,这些方法不接受可变数量的参数。在本教程中,我们学习了 System.out.print()System.out.println() 方法的工作原理。

相关文章 - Java Print