[Java] System.out
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
out è un'istanza di PrintStream ed un attributo di System.
ok quindi la classe è PrintStream, e System. cos'è?
e cosa significa che qualcosa è un attributo di qualcos'altro?
e cosa significa che qualcosa è un attributo di qualcos'altro?
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; // ... }
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?
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?
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:
Se trovi un import come quello che hai citato tu, però, è molto più probabile che prima tu abbia qualcosa del tipo:
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.
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.