• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

about system.in & system.out

 
Greenhorn
Posts: 8
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hi
when i read a book it was given that "in" & "out" in system.in & system.out are variables but we can acess methods only through objects so how the method print() is called by the variables in & out.
 
Ranch Hand
Posts: 625
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
in and out are variables that reference objects.
 
"The Hood"
Posts: 8521
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
The methods are static methods, and therefore do NOT require an object in order to use them.
 
Ranch Hand
Posts: 42
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Kanagaraj,
Let me try to explain a little bit on this. System class contains the static fields
public static final PrintStream out
public static final InputStream in
public static final PrintStream err
which refers to the standard output, input and error streams. note that these fields are declared as static and hence can be accessed without instantiation.
print() and println() are methods defined in the PrintStream class. out being defined as Printstream type can access println() using out.println().
Hope this is clear.
Kalidas
 
Ranch Hand
Posts: 47
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Can you give me cases of when you would use each of these static methods?
 
(instanceof Sidekick)
Posts: 8791
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Kalidas I think you'll find they are not final. There are setters for them so you can plug in your own.
 
author and iconoclast
Posts: 24207
46
Mac OS X Eclipse IDE Chrome
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Stan James:
I think you'll find they are not final.



Ah. This is one of the hairy little corners of the Java API. They are final -- go check! The setOut(), setIn(), setErr() methods delegate to native methods, which aren't bound by ordinary mortal Java rules. Final variables which can change -- in the API! Aaaak!

A better implementation seems obvious to me: PrintStream isn't final, so they could have just used a package-private PrintStream class which allowed the underlying OutputStream to be changed, and then have setOut() merely twiddle that internal setting, without this crazy final variable modification.

Never did figure out their rationale there.
 
Ranch Hand
Posts: 3061
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Cindy Glass:
The methods are static methods, and therefore do NOT require an object in order to use them.



The print() and println() methods are NOT static, but as mentioned above, you call them via static reference variables. This means that you are calling these methods on objects just as required for non-static methods.

Layne
 
When it is used for evil, then watch out! When it is used for good, then things are much nicer. Like this tiny ad:
a bit of art, as a gift, the permaculture playing cards
https://gardener-gift.com
reply
    Bookmark Topic Watch Topic
  • New Topic