首页 文章

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

提问于
浏览
4

为这个愚蠢的问题道歉,但在我学习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 回答

  • 7

    因为 printlnPrintStream 类的实例方法,并且您需要一个类的实例来调用实例方法 .

    但是, System.outPrintStream 的实例,因此您可以执行以下操作:

    System.out.println("blah blah")
    

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

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

    Java教程中的这一部分可能会有所帮助:Lesson: Classes and Objects

  • 1

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

    例如,尝试以下代码:

    import java.io.PrintStream;
    ...
    PrintStream ps = System.out;
    ps.print('a');
    

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

  • 0

    您必须实例化PrintStream类,但它没有默认的无参数构造函数 .
    因此,从System类中使用其静态实例并直接调用print()方法是一种简单的方法 .

  • 0

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

    你可以试试这个:

    import java.io.PrintStream;
    PrintStream printStream = new PrintStream(System.out);
    // or better
    PrintStream printStream = System.out;
    printStream.println('a');
    

    PrintStream需要一个OutputStream作为构造函数,你可以给你想要的OutputStream:

    ByteArrayOutputStream,FileOutputStream,FilterOutputStream,ObjectOutputStream,OutputStream,PipedOutputStream

    Javadoc:OutputStream PrintStream

相关问题