|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
problema main[java]
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? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Il breve esempio che riporti è corretto.
Codice:
public class Classe { public static void main(String[] args) { Classe istanzaDi = new Classe(); } }
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
come mai mi da quell' errore?
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
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: Codice:
public class Classe { private int valore; public static void main(String[] args) { int x = valore; } } 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: Codice:
public class Classe { private int valore; public static void main(String[] args) { Classe istanza = new Classe(); int x = istanza.valore; } } E' anche corretto dire: Codice:
public class Classe { private static Classe istanza = new Classe(); private int valore; public static void main(String[] args) { int x = istanza.valore; } } "instanza" è dichiarato "static", esiste in un contesto statico. Nell'altro contesto statico, quello del metodo main, l'uso di "istanza" è quindi pienamente legittimo.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:34.