Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

Apologies for this silly question, but while I was learning java classes, I tried the following

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...);

And I tried to see if I can import java.io.PrintStream and use print() or println() as it is, instead of System.out.println().

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

And it came out with a compile error saying

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)

Why can't I use println() as it is after importing java.io.Printstream ?

like image 317
nohup Avatar asked Oct 30 '15 08:10

nohup


2 Answers

Because println is an instance method of the PrintStream class, and you need an instance of a class to call instance methods.

However, System.out is an instance of PrintStream, so you can do:

 System.out.println("blah blah")

or you can create a new PrintStream instance, for example to write to a file:

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

This section in the Java Tutorial can be helpful: Lesson: Classes and Objects

like image 200
Grodriguez Avatar answered Oct 30 '22 15:10

Grodriguez


You need an instance of PrintStream because println is not static.

You can try this:

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

PrintStream needs a OutputStream for the constructor, you can give the OutputStream you want:

ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream

Javadoc : OutputStream PrintStream

like image 30
David Kühner Avatar answered Oct 30 '22 14:10

David Kühner