为什么我不能在java.io.PrintStream中使用print()或println()方法,因为它是在导入类之后?

Why can't I use the print() or println() method in java.io.PrintStream as it is after importing the class?

对这个愚蠢的问题表示歉意,但当我学习Java类时,我尝试了以下几点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
javap -c java.lang.System | grep -i out
  public static final java.io.PrintStream out;

javap java.io.PrintStream | grep print
public void print(boolean);
public void print(char);
public void print(int);
public void print(long);
public void print(float);
public void print(double);
public void print(char[]);
public void print(java.lang.String);
public void print(java.lang.Object);
public void println();
public void println(boolean);
public void println(char);
public void println(int);
public void println(long);
public void println(float);
public void println(double);
public void println(char[]);
public void println(java.lang.String);
public void println(java.lang.Object);
public java.io.PrintStream printf(java.lang.String, java.lang.Object...);
public java.io.PrintStream printf(java.util.Locale, java.lang.String, java.lang.Object...);

我试着看看我能不能进口java.io.PrintStream,用print()println()代替System.out.println()

1
2
import java.io.PrintStream;
println('a');

结果它出现了一个编译错误

1
2
3
Exception in thread"main" java.lang.Error: Unresolved compilation problem:
    The method print(char) is undefined for the type array
    at array.main(array.java:16)

为什么我不能像进口java.io.PrintStream后那样使用println()


因为printlnPrintStream类的一个实例方法,需要一个类的实例来调用实例方法。

但是,System.outPrintStream的一个实例,所以您可以这样做:

1
 System.out.println("blah blah")

或者您可以创建一个新的PrintStream实例,例如写入文件:

1
2
 PrintStream p = new PrintStream(filename);
 p.println("blah blah");

Java教程中的这一部分可以帮助:上课:类和对象


您需要一个printstream实例,因为println不是静态的。

您可以尝试以下操作:

1
2
3
4
5
import java.io.PrintStream;
PrintStream printStream = new PrintStream(System.out);
// or better
PrintStream printStream = System.out;
printStream.println('a');

printstream需要一个outputstream作为构造函数,您可以提供所需的outputstream:

通过EarrayOutputstream,文件输出流,过滤器输出流,对象输出流,输出流,管道输出流

贾瓦多:输出流打印流


您必须实例化printstream类,但它没有默认的no arg构造函数。因此,从系统类使用其静态实例并直接调用print()方法是一种简单的方法。


在Java中,总是需要在特定对象上调用方法(函数)。这就是为什么如果要调用这些方法(print、println)中的任何一个,则需要首先创建java.io.printstream类型的对象。

例如,尝试以下代码:

1
2
3
4
import java.io.PrintStream;
...
PrintStream ps = System.out;
ps.print('a');

它创建打印到cosole的printstream对象,并在那里打印给定的char参数。