View Full Version : problema main[java]
nuovoUtente86
28-06-2007, 15:35
quando faccio qualcosa del genere
public Classe{
costruttore
metodi.....
public static void main(String[]args){
Classe=new Classe();}}
Mi dice che non posso utilizzare un oggetto o metodo non statico in un contesto statico e sono costretto a fare il metodo main in una classe a parte però vedo in giro che molti lo inseriscono come nell esempio su indicato a me.Dove sbaglio?
Il breve esempio che riporti è corretto.
public class Classe {
public static void main(String[] args) {
Classe istanzaDi = new Classe();
}
}
L'unica cosa che occorre ricordare è che in un contesto statico (metodo statico, blocco di inizializzazione statico, inizializzatore di un campo statico, invocazione di super costruttore e invocazione di costruttore alternato) non esiste il "this". Il resto è una conseguenza diretta di questa mancanza.
nuovoUtente86
28-06-2007, 17:42
come mai mi da quell' errore?
Il compilatore rileva nel tuo codice l'uso di un identificatore (il nome di un campo o di un metodo) che non può essere risolto se non preponendo il riferimento "this".
Poichè tale riferimento non esiste in un contesto statico, ti arriva il messaggio di errore: in un contesto statico non puoi usare qualcosa che richieda la preposizione di this.
Ad esempio:
public class Classe {
private int valore;
public static void main(String[] args) {
int x = valore;
}
}
L'unica cosa che il compilatore può riconoscere in "valore" è l'intero dichiarato come campo delle istanze di Classe.
Si dice che certe cose siano membri di (istanza) per sottolineare il fatto che non è possibile usarli senza passare per chi li possieda.
Per valore, il possessore è una qualsiasi istanza di Classe.
Questa istanza non è specificata nell'enunciato in rosso. Se l'istanza a cui appartiene un membro non è specificata, allora il compilatore usa il valore "this". Cioè dice:
int x = this.valore
In un contesto statico non esiste un'istanza corrente, non c'è un this. E salta fuori quel messaggio di errore.
E' corretto invece dire:
public class Classe {
private int valore;
public static void main(String[] args) {
Classe istanza = new Classe();
int x = istanza.valore;
}
}
Qui l'accesso al campo "valore" è fatto non rispetto a "this" ma rispetto ad un riferimento che esiste in un contesto statico, essendo "istanza" dichiarata nel corpo del metodo statico main.
E' anche corretto dire:
public class Classe {
private static Classe istanza = new Classe();
private int valore;
public static void main(String[] args) {
int x = istanza.valore;
}
}
Dal punto di vista della questione esiste o non esiste un riferimento dichiarato in un contesto statico, questa situazione è identica alla precendete.
"instanza" è dichiarato "static", esiste in un contesto statico.
Nell'altro contesto statico, quello del metodo main, l'uso di "istanza" è quindi pienamente legittimo.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.