为这个愚蠢的问题道歉,但在我学习java课程时,我尝试了以下内容
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()
.
import java.io.PrintStream;
println('a');
它出现了一个编译错误说
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()
?
4 回答
因为
println
是PrintStream
类的实例方法,并且您需要一个类的实例来调用实例方法 .但是,
System.out
是PrintStream
的实例,因此您可以执行以下操作:或者您可以创建一个新的
PrintStream
实例,例如写入文件:Java教程中的这一部分可能会有所帮助:Lesson: Classes and Objects
在Java中您总是需要在特定对象上调用方法(函数) . 这就是为什么如果要调用这些方法中的任何一个(print,println),首先需要创建java.io.PrintStream类型的对象 .
例如,尝试以下代码:
它创建PrintStream对象,该对象打印到cosole并在那里打印给定的char参数 .
您必须实例化PrintStream类,但它没有默认的无参数构造函数 .
因此,从System类中使用其静态实例并直接调用print()方法是一种简单的方法 .
您需要一个PrintStream实例,因为println不是静态的 .
你可以试试这个:
PrintStream需要一个OutputStream作为构造函数,你可以给你想要的OutputStream:
ByteArrayOutputStream,FileOutputStream,FilterOutputStream,ObjectOutputStream,OutputStream,PipedOutputStream
Javadoc:OutputStream PrintStream