[Java] System.out

Usernamer1
out appartiene alla classe PrintStream, ma i suoi metodi si invocano con System.out e quindi non dovrebbe essere System la classe d'appartenenza di out?

Risposte
dab1
out è un'istanza di PrintStream ed un attributo di System.

Usernamer1
ok quindi la classe è PrintStream, e System. cos'è?
e cosa significa che qualcosa è un attributo di qualcos'altro?

apatriarca
System è una classe che ha un campo di nome out che è una istanza della classe PrintStream. System sarà insomma qualcosa come segue:
public class System {
    // ...
    public static PrintStream out; 
    // ...
}

Usernamer1
ok i campi non li abbiamo ancora studiati.
La domanda mi è sorta perché vedendo degli esercizi corretti dal prof nel metodo main println era invocato tramite System.out.println e basta, nei metodi di altre classi che venivano invocati nel main invece c'era solo out.println, ma con un import java.io.PrintStream all'inizio... come mai questa differenza?

Di regola nel main si invoca con System.out.println e in metodi di altre classi con out.println dopo aver fatto l'import?

dab1
No. out.println() è una chiamata al metodo println dell'oggetto out di classe PrintStream.
System.out è lo standard output, ma nulla vieta di istanziarne di nuovi per scopi differenti (con nomi peraltro diversi da out). Quando tu scrivi System.out stai dicendo di prendere l'attributo out di System. Quando dici out e basta stai utilizzando una variabile out dichiarata in maniera opportuna (non divago sul concetto di scope, lo analizzerai in seguito).

Potenzialmente, con un import apposito, potresti utilizzare System.out richiamandola semplicemente con out:
import static java.lang.System.out;


Se trovi un import come quello che hai citato tu, però, è molto più probabile che prima tu abbia qualcosa del tipo:
PrintStream out = ... ;

Dove definisci una nuova variabile out di classe PrintStream, operazione che necessita dell'import da te citato.

In ogni caso se non sai ancora cosa siano gli attributi (o campi) di una classe, penso sia un po' presto per farsi certe domande.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.