Empfohlen, 2019

Tipp Der Redaktion

Stahleigenschaften und Geschichte
Siedepunkthöhe
Dumb Mitt Romney Zitate

Statische Felder in Java

Es kann vorkommen, dass es nützlich ist, Werte zu haben, die von allen Instanzen einer bestimmten Klasse gemeinsam genutzt werden. Statische Felder und statische Konstanten ermöglichen diese Art der gemeinsamen Nutzung, indem sie zu der Klasse und nicht zu den tatsächlichen Objekten.

Der statische Modifikator

Normalerweise können in einer Klasse definierte Felder und Methoden nur verwendet werden, wenn ein Objekt dieses Klassentyps erstellt wurde. Stellen Sie sich beispielsweise eine einfache Artikelklasse vor, die Waren in einem Geschäft verfolgt:

öffentliche Klasse Item {private String itemName; public Item (String itemName) {this.itemName = itemName; } public String getItemName () {return itemName; }}

Um die getItemName () -Methode verwenden zu können, müssen Sie zuerst ein Item-Objekt erstellen, in diesem Fall catFood:

öffentliche Klasse StaticExample {public static void main (String [] args) {Item catFood = new Item ("Whiskas"); System.out.println (catFood.getItemName ()); }}

Wenn der statische Modifizierer jedoch in einer Feld- oder Methodendeklaration enthalten ist, ist keine Instanz der Klasse erforderlich, um das Feld oder die Methode zu verwenden. Sie sind der Klasse und nicht einem einzelnen Objekt zugeordnet. Wenn Sie sich das Beispiel oben ansehen, werden Sie feststellen, dass der statische Modifikator bereits in der Hauptdeklaration der Methode verwendet wird:

Öffentlichkeit statisch void main (String [] args) {

Die Hauptmethode ist eine statische Methode, bei der kein Objekt vorhanden ist, bevor es aufgerufen werden kann. Da main () der Ausgangspunkt für eine Java-Anwendung ist, gibt es tatsächlich keine Objekte, die sie aufrufen können. Wenn Sie ein Programm haben möchten, das sich ständig selbst aufruft, können Sie Folgendes tun:

öffentliche Klasse StaticExample {public static void main (String [] args) {String [] s = {"random", "string"}; StaticExample.main (s); }}

Nicht sehr nützlich. Beachten Sie jedoch, wie die Methode main () ohne eine Instanz einer StaticExample-Klasse aufgerufen werden kann.

Was ist ein statisches Feld?

Statische Felder werden auch als Klassenfelder bezeichnet. Sie sind einfach Felder, die den statischen Modifikator in ihren Deklarationen enthalten. Gehen wir zum Beispiel zurück zur Item-Klasse und fügen ein statisches Feld hinzu:

öffentliche Klasse Item {// statisches Feld uniqueId private static int uniqueId = 1; private int itemId; private String itemName; public Item (String itemName) {this.itemName = itemName; itemId = uniqueId; uniqueId ++; }}

Die Felder itemId und itemName sind normale nicht statische Felder. Wenn eine Instanz einer Item-Klasse erstellt wird, enthalten diese Felder Werte, die in diesem Objekt enthalten sind. Wenn ein anderes Item-Objekt erstellt wird, enthält es ebenfalls die Felder itemId und itemName zum Speichern von Werten.

Das statische Feld uniqueId enthält jedoch einen Wert, der für alle Objektobjekte gleich ist. Wenn 100 Elementobjekte vorhanden sind, gibt es 100 Instanzen der Felder itemId und itemName, jedoch nur ein statisches uniqueId-Feld.

Im obigen Beispiel wird uniqueId verwendet, um jedem Element eine eindeutige Nummer zuzuweisen. Dies ist einfach zu bewerkstelligen, wenn jedes erstellte Item-Objekt den aktuellen Wert im statischen uniqueId-Feld übernimmt und ihn dann um eins erhöht. Die Verwendung eines statischen Felds bedeutet, dass jedes Objekt nicht über die anderen Objekte Bescheid wissen muss, um eine eindeutige ID zu erhalten. Dies kann nützlich sein, wenn Sie wissen möchten, in welcher Reihenfolge die Artikelobjekte erstellt wurden.

Was ist eine statische Konstante?

Statische Konstanten sind genau wie statische Felder, außer dass ihre Werte nicht geändert werden können. In der Felddeklaration die Finale und statisch Modifikatoren werden beide verwendet. Beispielsweise sollte die Item-Klasse möglicherweise die Länge des itemName einschränken. Wir könnten eine statische Konstante maxItemNameLength erstellen:

öffentliche Klasse Item {private static int id = 1; public static final int maxItemNameLength = 20; private int itemId; private String itemName; public Item (String itemName) {if (itemName.length ()> maxItemNameLength) {this.itemName = itemName.substring (0,20); } else {this.itemName = itemName; } itemId = id; id ++; }}

Wie bei statischen Feldern werden statische Konstanten der Klasse und nicht einem einzelnen Objekt zugeordnet:

öffentliche Klasse StaticExample {public static void main (String [] args) {Item catFood = new Item ("Whiskas"); System.out.println (catFood.getItemName ()); System.out.println (Item.maxItemNameLength); }}

Zu der statischen Konstante maxItemNameLength sind zwei wichtige Dinge zu beachten:

  • Es ist als öffentliches Feld deklariert. Im Allgemeinen ist es eine schlechte Idee, ein Feld in jeder von Ihnen entworfenen Klasse öffentlich zu machen, aber in diesem Fall spielt es keine Rolle. Der Wert der Konstante kann nicht geändert werden.
  • Die statische Konstante wird aus dem Klassennamen Item und nicht aus einem Item-Objekt verwendet.

Statische Konstanten sind in der gesamten Java-API sichtbar. Die Integer-Wrapper-Klasse enthält beispielsweise zwei, die die maximalen und minimalen Werte eines int-Datentyps speichern:

System.out.println ("Der maximale Wert für int ist:" + Integer.MAX_VALUE); System.out.println ("Der minimale Wert für int ist:" + Integer.MIN_VALUE); Ausgabe: Der maximale Wert für int ist: 2147483647 Der minimale Wert für int ist: -2147483648

Beliebte Kategorien

Top