What's the meaning of System.out.println in Java?
Is this static println
function in out
class from System
namespace?
namespace System { class out { static println ... }
How can I interpret this name? And where in JRE this function is defined? In java.lang.System
/java.lang.Object
?
Solution 1:
No. Actually out
is a static member in the System
class (not as in .NET), being an instance of PrintStream
. And println
is a normal (overloaded) method of the PrintStream
class.
See http://download.oracle.com/javase/6/docs/api/java/lang/System.html#out.
Actually, if out
/err
/in
were classes, they would be named with capital character (Out
/Err
/In
) due to the naming convention (ignoring grammar).
Solution 2:
System
is a class, that has a public static field out
. So it's more like
class System
{
public static PrintStream out;
}
class PrintStream
{
public void println ...
}
This is a slight oversimplification, as the PrintStream
class is actually in the java.io
package, but it's good enough to show the relationship of stuff.
Solution 3:
System.out.println()
High level Understanding
For understanding this we need to recall few basics of java:
- dot (.) operator in java: In java . (dot operator) is used only to call methods or variables. So we can say out is either method or variable.
- Methods in java : we know methods always have parenthesis ‘( )’ after method name, So out cannot be a method in java. So out its a variable and println() is a method.
- Class name in java: Class name should start with Capital letter ideally in java, So System is a class.
Now with basic knowledge of java we know :
- System is a Class
- out is a Variable
- println() is a method
Lets get more in details:
out variable: static or instance?
called using class name, so we know its static variable of System class.
but its calling a method println() method so ‘out’ is an object of the reference type PrintStream.
the System class belongs to java.lang package
class System {
public static final PrintStream out;
//...
}
the Prinstream class belongs to java.io package
class PrintStream{
public void println();
//...
}
Solution 4:
Check following link:
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html
You will clearly see that:
System
is a class in the java.lang
package.
out
is a static member of the System
class, and is an instance of java.io.PrintStream
.
println
is a method of java.io.PrintStream
. This method is overloaded to print message to output destination, which is typically a console or file.
Solution 5:
println
and print
are the two overloaded methods which belong to the PrintStream
class.
To access them we need an instance of this class.
A static property called out
of type PrintStream
is created on the System
class.
Hence to access the above methods we use the following statements:
System.out.println("foo");
System.out.print("foo");