Funktionsweise statischer Felder in Java

click fraud protection

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 Aktivieren Sie diese Art der Freigabe, indem Sie zur Klasse und nicht zu den eigentlichen 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 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 Methode getItemName () 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 = neues Item ("Whiskas");

 System.out.println (catFood.getItemName ());

 }

 } 

Wenn der statische Modifikator jedoch in einer Feld- oder Methodendeklaration enthalten ist, ist keine Instanz der Klasse vorhanden erforderlich, um das Feld oder die Methode zu verwenden - sie sind der Klasse zugeordnet und nicht einer Einzelperson Objekt. Wenn Sie auf das obige Beispiel zurückblicken, werden Sie feststellen, dass der statische Modifikator bereits in der verwendet wird

instagram viewer
Hauptmethodendeklaration:

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

Das Hauptmethode ist ein statische Methode Dafür muss kein Objekt vorhanden sein, bevor es aufgerufen werden kann. Da main () der Ausgangspunkt für jede Java-Anwendung ist, gibt es tatsächlich noch keine Objekte, die sie aufrufen könnten. Wenn Sie Lust auf ein Programm haben, 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, aber beachten Sie, wie die main () -Methode 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, deren Deklarationen den statischen Modifikator enthalten. Kehren wir beispielsweise zur Item-Klasse zurück 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, haben diese Felder Werte, die in diesem Objekt enthalten sind. Wenn ein anderes Item-Objekt erstellt wird, enthält es auch die Felder itemId und itemName zum Speichern von Werten.

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

Im obigen Beispiel wird uniqueId verwendet, um jedem Item-Objekt eine eindeutige Nummer zu geben. Dies ist einfach, wenn jedes erstellte Item-Objekt den aktuellen Wert im statischen Feld uniqueId übernimmt und ihn dann um eins erhöht. Die Verwendung eines statischen Feldes bedeutet, dass nicht jedes Objekt über die anderen Objekte Bescheid wissen muss, um ein zu erhalten Eindeutige ID. Dies kann hilfreich sein, wenn Sie wissen möchten, in welcher Reihenfolge die Objektobjekte 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 wird 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);

 }

 sonst

 {

 this.itemName = itemName;

 }

 itemId = id;

 id ++;

 } } 

Wie bei statischen Feldern werden statische Konstanten eher der Klasse als einem einzelnen Objekt zugeordnet:

 öffentliche Klasse StaticExample {


 public static void main (String [] args) {


 Item catFood = neues Item ("Whiskas");

 System.out.println (catFood.getItemName ());

 System.out.println (Item.maxItemNameLength);

 }

 }


Bei 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 einer 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 verwendet, nicht aus einem Item-Objekt.

Statische Konstanten sind in der gesamten Java-API sichtbar. Zum Beispiel die Integer-Wrapper-Klasse hat zwei, die die Maximal- und Minimalwerte eines int speichern Datentyp kann haben:

 System.out.println ("Der Maximalwert für int ist:" + Integer. MAX_VALUE);

 System.out.println ("Der Mindestwert für int ist:" + Integer. MIN_VALUE);


 Ausgabe:

 Der Maximalwert für int ist: 2147483647

 Der Mindestwert für int ist: -2147483648


instagram story viewer