public static void main () Zugriff auf nicht statische variable
Sein, sagte, dass nicht-statische Variablen kann nicht verwendet werden, die in einer statischen Methode.Aber public static void main hat.Wie ist das?
Statische Methoden können nicht auf nicht-statische Felder, aber natürlich können Sie definieren lokale Variablen in der Methode selbst (und durch die, die Zugriff auf nicht-statische Felder). Bitte geben Sie ein Beispiel zu klären.
InformationsquelleAutor user1526671 | 2012-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, tut es nicht.
aber
oder wenn Sie instanziieren
A
Auch
wird funktionieren, da
a
ist eine lokale variable hier, und nicht eine Instanz-variable. Eine Methode lokale variable ist immer erreichbar, während der Ausführung der Methode, unabhängig davon, ob die Methode iststatic
oder nicht.InformationsquelleAutor Keppil
Ja, die main-Methode kann Zugriff auf nicht-statische Variablen, aber nur indirekt, durch die aktuellen Instanzen.
Beispiel:
Was Menschen meinen, wenn Sie sagen "nicht-statische Variablen können nicht verwendet werden, die in einer statischen Methode" ist, dass nicht-statische member der selben Klasse kann nicht direkt aufgerufen werden (wie gezeigt in Keppils Antwort zum Beispiel).
Verwandte Frage:
Update:
Wenn man über nicht-statische Variablen, die man implizit bedeutet member-Variablen. (Da lokale Variablen nicht möglich, eine statische modifier sowieso.)
In den code
du bist deklarieren einer lokalen variable (die in der Regel nicht bezeichnet als nicht-statisch, obwohl es nicht eine static-modifier).
Ah, interessante Bemerkung. Antwort aktualisiert.
InformationsquelleAutor aioobe
Die main-Methode keinen Zugriff auf nicht-statische member.
Dies ist denn standardmäßig beim Aufruf einer Methode oder variable, es ist wirklich Zugriff auf die
this.method()
oder diese.variable. Aber in der main () - Methode oder anderen statischen Methode(), nicht "diese" Objekte muss noch erstellt wurde.In diesem Sinne ist die statische Methode ist nicht Bestandteil der Objekt Instanz der Klasse, die es enthält. Das ist die Idee hinter utility-Klassen.
Rufen jede nicht-statische Methode oder variable in einer statischen Kontext, müssen Sie zuerst konstruieren Sie das Objekt mit einem Konstruktor oder eine factory wie deine würde irgendwo außerhalb der Klasse.
Mehr Tiefe:
Im Grunde ist es ein Fehler im design von Java-IMO, ermöglicht die statischen Elemente (Methoden und Felder) verwiesen werden, die als wenn Sie waren beispielsweise Mitglieder. Das kann sehr verwirrend sein in code wie diesem:
Dass sieht wie es schickt den neuen thread zu schlafen, aber es eigentlich kompiliert hinunter in code wie diesem:
weil
sleep
ist eine statische Methode, die nur macht immer der aktuellen thread schlafen.In der Tat, die variable selbst ist nicht geprüft für nicht-Nichtigkeit (mehr; früher war es, glaube ich):
Einige IDEs konfiguriert werden kann, um die Ausgabe einer Warnung oder Fehler bei code-wie diese - Sie sollten es nicht tun, denn es schadet der Lesbarkeit. (Dies ist einer der Fehler, die korrigiert wurde, von C#...)
wenn statische Variablen werden initialisiert in Java.
so ist die einzige Möglichkeit main auf die instanceMethod und instanceVariable ist, wenn Sie ein Objekt von der Demo-Klasse?
wenn
instanceMethod
undinstanceVariable
waren, Instanz, Methode und Instanz-variable bzw. dann konnten Sie nur den Zugriff von einem statische Methode durch dereferenzieren Sie von dem Objekt der jeweiligen Klasse.InformationsquelleAutor Lion
** * * Hier können Sie sehen, Tabelle, deaktivieren Sie den Zugriff von statischen und nicht-statischen Daten-member in statische und nicht-statische Methoden. **
InformationsquelleAutor Sufyan Ahmad
Können Sie erstellen, die nicht-statische Verweise in statischen Methoden wie :
Gleiche Sache, die wir tun, im Falle von
public static void main(String[] args)
MethodeInformationsquelleAutor Nandkumar Tekale
InformationsquelleAutor Abhishek Paithane