Was macht das "statische" Schlüsselwort in einer Klasse?
Genau zu sein, habe ich versucht diesen code:
package hello;
public class Hello {
Clock clock = new Clock();
public static void main(String args[]) {
clock.sayTime();
}
}
Aber gab es den Fehler
Nicht Zugriff auf nicht-statisches Feld in der statischen Methode main
So, ich habe die Erklärung von clock
:
static Clock clock = new Clock();
Und es funktionierte. Was bedeutet es, um dieses Schlüsselwort vor der Erklärung? Was genau werden Sie tun und/oder zu beschränken, die in Bezug auf das, was getan werden kann, um das Objekt?
InformationsquelleAutor der Frage Click Upvote | 2009-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
static
- Mitglieder gehören der Klasse und nicht eine bestimmte Instanz.Bedeutet es, dass nur eine Instanz einer
static
Feld vorhanden ist[1] auch wenn Sie eine million Instanzen der Klasse, oder du nicht erstellen. Es wird geteilt durch alle Instanzen.Seit
static
Methoden auch gehören nicht zu einer bestimmten Instanz, Sie können nicht beziehen sich auf Instanz-Mitglieder (wie würden Sie wissen, welche Instanz die Klasse Hello, die Sie wollen zu finden?).static
Mitglieder können nur Lesenstatic
Mitglieder. Instanz können die Mitglieder natürlich Zugriffstatic
Mitglieder.Anmerkung: natürlich
static
Mitglieder können den Zugriff auf Instanz-Mitglieder über eine Referenz auf ein Objekt.Beispiel:
[1]: Je nach Laufzeit-Eigenschaften, kann es einer pro ClassLoader oder AppDomain oder Gewinde, aber das ist neben dem Punkt.
InformationsquelleAutor der Antwort Mehrdad Afshari
Bedeutet es, dass es nur eine Instanz von "Uhr" Hallo, nicht eine je eigene Instanz von "Hello" - Klasse, oder mehr-also, es bedeutet, dass es eine gemeinsam geteilte "clock reference" die von allen Instanzen von "Hallo" - Klasse.
Also, wenn Sie waren zu tun, ein "neues Hallo" überall in Ihrem code:
Im ersten Szenario (vor der änderung, ohne Verwendung von "static"), wäre es eine neue Uhr jedes mal, wenn eine "neues Hallo" heißt, aber
B - im zweiten Szenario (nach dem ändern, mit "static"), jedes "neue Hello" etwa würde sich noch teilen, und verwenden Sie den ersten und gleichen "Takt" Referenz erstellt.
Sofern Sie notwendig ist "Uhr", die irgendwo außerhalb des Haupt -, dies würde genauso gut funktionieren:
InformationsquelleAutor der Antwort Paul Tomblin
Den
static
keyword bedeutet, dass etwas (ein Feld, eine Methode oder geschachtelte Klasse) ist in Bezug auf die Typ statt einer bestimmten Instanz der Typ. So zum Beispiel, nennt manMath.sin(...)
ohne Instanz derMath
Klasse, und in der Tat Sie nicht erstellen Sie eine Instanz derMath
Klasse.Weitere Informationen finden Sie in der relevante bit von Oracle ' s Java-Tutorial.
Sidenote
Java leider ermöglicht Ihnen den Zugriff auf statische member, als ob Sie waren beispielsweise Mitglieder, z.B.
Macht es Aussehen als wenn
sleep
ist eine Instanz-Methode, aber es ist eigentlich eine statische Methode ist immer lässt den aktuellen thread schlafen. Es ist eine bessere Praxis um dies zu verdeutlichen, wird im aufrufenden code:InformationsquelleAutor der Antwort Jon Skeet
Den
static
Schlüsselwort in Java bedeutet, dass die variable oder Funktion ist geteilt zwischen allen Instanzen dieser Klasse als es gehört zu den Typnicht die eigentlichen Objekte selbst.Also, wenn Sie eine variable:
private static int i = 0;
und erhöhen Sie es (i++
) in eine Instanz, die änderung spiegelt sich in allen Instanzen.i
wird jetzt 1 in allen Instanzen.Statische Methoden können verwendet werden, ohne Instanziierung eines Objektes.
InformationsquelleAutor der Antwort geowa4
Grundsätzliche Verwendung von static-member...
So können Sie die gemeinsamen Werte in der alle Schüler ohne senden Instanz der Klasse Hello zu anderen Klasse. Und whit statische Sie brauchen nicht zum erstellen von Klassen-Instanz.
Können Sie rufen einfach statische Werte oder Methoden der Klasse name:
InformationsquelleAutor der Antwort Vasil Valchev
Statisch bedeutet, dass Sie nicht haben, erstellen Sie eine Instanz der Klasse, die die Methoden oder Variablen, die der Klasse zugeordnet. In deinem Beispiel könnte man nennen:
direkt, statt:
Innerhalb einer static-Methode (die gehört zu einer Klasse) können Sie nicht auf irgendwelche Mitglieder, die nicht statisch sind, da deren Werte sind abhängig von Ihrer Instanziierung der Klasse. Eine nicht-statische Clock-Objekt, das eine Instanz-Mitglied, hätte einen anderen Wert/Referenz, die für jede Instanz der Klasse Hello, und daher konnte man nicht auf es von den statischen Teil der Klasse.
InformationsquelleAutor der Antwort Elie
Static in Java:
Static ist eine Non Access-Modifier.
Das Schlüsselwort static gehört zur Klasse als Instanz der Klasse.
kann verwendet werden, zu befestigen, eine Variable oder eine Methode zu einer Klasse.
Static-Schlüsselwort KANN verwendet werden mit:
Methode
Variable
Geschachtelte Klasse innerhalb einer anderen Klasse
Initialisierung Block
KANN NICHT verwendet werden mit:
Klasse (Nicht Geschachtelte)
Konstruktor
Schnittstellen
Methode Lokale Innere Klasse(Unterschied geschachtelte Klasse)
Innere Klasse Methoden
Instanz-Variablen
Lokale Variablen
Beispiel:
Stellen Sie sich das folgende Beispiel, das eine Instanz-variable namens countdie in erhöht im Konstruktor:
Ausgabe:
Da die Instanz-variable erhält die Erinnerung an die Zeit der Objekterstellung, jedes Objekt wird die Kopie der Instanz-variable, wenn es erhöht wird, wird es nicht reflektieren zu anderen Objekten.
Nun, wenn wir die Instanz-variable count, um eine statische man dann das Programm generiert verschiedene Ausgabeformate:
Ausgabe:
In diesem Fall static variable bekommt den Speicher nur einmal, wenn jedes Objekt, ändert sich der Wert der statischen Variablen, behält es seinen Wert.
Statische Finale:
Die Globale variable, die deklariert ist als endgültige und statische bleibt unverändert für die gesamte Ausführung. Da Statische member werden in der Klasse gespeichert Speicher und Sie geladen sind, nur einmal in der ganzen Abwicklung. Sie sind für alle Objekte der Klasse. Wenn Sie deklarieren von statischen Variablen, die als final, jedes der Objekte können nicht ändern, Ihren Wert, denn Sie ist endgültig. Daher werden die Variablen als final deklariert und statische manchmal auch als Konstanten. Alle Felder der Schnittstellen bezeichnet werden, die als Konstanten, denn Sie sind final und static default.
Bild-Ressource : Final Static
InformationsquelleAutor der Antwort Aftab Virtual
Dieser Diskussion bisher ignoriert classloader überlegungen. Genaugenommen Java-statische Felder sind geteilt zwischen allen Instanzen einer Klasse für einen bestimmten classloader.
InformationsquelleAutor der Antwort Julien Chastang
Hinzufügen, um bereits vorhandene Antworten, lassen Sie mich versuchen, mit einem Bild:
Einem Zinssatz von 2% wird angewendet auf ALLE Spareinlagen. Daher ist es statische.
Einer Bilanz sollte einzelnenso ist es nicht statisch.
InformationsquelleAutor der Antwort Andrejs
Einem Feld zugewiesen werden können, um entweder die Klasse oder eine Instanz einer Klasse. Standardmäßig sind die Felder Instanz-Variablen. Durch die Verwendung
static
dem Feld wird eine Klasse variable, so gibt es eine und nur eineclock
. Wenn Sie eine änderungen an einer Stelle, es ist überall sichtbar. Beispiel varables geändert werden, unabhängig voneinander.InformationsquelleAutor der Antwort sblundy
In Java, die
static
Schlüsselwort kann nur als Angabe der folgenden:Wenn Sie denken, der
static
auf diese Weise wird es einfacher zu verstehen, seine Verwendung in den verschiedenen Kontexten, in denen es Auftritt:Einen
static
Feld ist ein Feld, das gehört zu der Klasse und nicht an eine bestimmte InstanzEinen
static
- Methode ist eine Methode, die keine Ahnung vonthis
; es ist definiert in der Klasse und wissen nicht zu einer bestimmten Instanz der Klasse, es sei denn, eine Referenz übergeben wird, esEinen
static
Mitglied der Klasse ist eine geschachtelte Klasse, ohne jede Vorstellung oder Kenntnis von einer Instanz der umschließenden Klasse (es sei denn, eine Referenz zu einem umschließenden Klasse-Instanz übergeben wird)InformationsquelleAutor der Antwort scottb
Statischen und lässt die Uhr ein Mitglied der Klasse statt einer Instanz Mitglied. Ohne das static-Schlüsselwort, müssen Sie erstellen eine Instanz der Klasse Hello (was hat eine Uhr member-variable) - z.B.
InformationsquelleAutor der Antwort Stephen Doyle
statische Methoden verwenden keine Instanz-Variablen der Klasse, die Sie definiert wurden. Eine sehr gute Erklärung für die Differenz gefunden werden kann auf auf dieser Seite
InformationsquelleAutor der Antwort Marc Novakowski
Ich entwickelte eine Vorliebe für statische Methoden (nur, wenn möglich) im "Helfer" - Klassen.
Die aufrufende Klasse müssen nicht erstellen Sie ein anderes Mitglied (Instanz -) variable mit der helper-Klasse. Rufen Sie einfach die Methoden der helper-Klasse. Auch die helper-Klasse hat sich verbessert, weil Sie Sie nicht mehr benötigen einen Konstruktor, und Sie müssen kein Mitglied (Instanz -) Variablen.
Gibt es wahrscheinlich andere Vorteile.
InformationsquelleAutor der Antwort javaguy
Dem Stichwort
static
wird verwendet, um zu Kennzeichnen ein Feld oder eine Methode, wie die Zugehörigkeit zu der Klasse selbst und nicht von der Instanz. Mit Ihrem code, wenn das ObjektClock
ist statisch, alle Instanzen derHello
Klasse gemeinsamClock
Datenelement (field) gemeinsam haben. Wenn Sie es machen, nicht statisch, jede einzelne InstanzHello
eine eindeutigeClock
Feld.Das problem ist, dass Sie Hinzugefügt ein main Methode, um Ihre Klasse
Hello
so, dass man den code ausführen. Das problem hier ist, dass die main Methode ist statisch und als solche, es kann nicht beziehen sich auf nicht-statische Felder und Methoden innerhalb der it. Sie können beheben gibt es zwei Möglichkeiten:Hello
Klasse statisch, damit Sie bezeichnet werden könnte, in der main Methode. Das ist wirklich keine gute Sache zu tun (oder dem falschen Grund t stellen Sie ein Feld und/oder eine Methode statisch)Hello
Klasse innerhalb der main-Methode und Zugriff auf alle it-Felder und-Methoden der Art, wie Sie gedacht waren, in den ersten Platz.Für Sie bedeutet dies, dass die folgenden änderungen an Ihrem code:
InformationsquelleAutor der Antwort hfontanez
Kann auch denken, statische member, die nicht mit einem "this" - Zeiger. Sie sind gemeinsam zwischen allen Instanzen.
InformationsquelleAutor der Antwort kal
Verständnis Statischen Konzepte
Zweiten Klasse
InformationsquelleAutor der Antwort Uddhav Gautam
main()
ist eine statische Methode, die zwei wesentlichen Einschränkungen:this()
undsuper()
kann nicht verwendet werden, im statischen Kontext.InformationsquelleAutor der Antwort Bharthan
Statische Variablen Kann nur dann zugegriffen werden, die nur in statischen Methoden, so dass, wenn wir deklarieren statische Variablen, diese getter-und setter-Methoden statische Methoden
statische Methoden einer Klasse, die wir zugreifen, mit dem Klassennamen
Der folgenden ist ein Beispiel für Statische Variablen Getter Und Setter:
InformationsquelleAutor der Antwort Bala Krishna
Wenn dieses Projekt auszuführen main-Methode zuerst geladen werden. Weil seine
static method
. Dann schauen Sie Objekt"a" object
.Aber ein Objekt nicht definieren noch. Wegen seiner nicht statisch. Dann kommen wie dieser Fehler.InformationsquelleAutor der Antwort Dev4World