Eine kurze Erklärung der fünf Arten von Java Static

Überblick

Es gibt fünf Arten von Java "statisch". Jedes ist jedoch ähnlich und unterschiedlich. In diesem Artikel werde ich die Punkte erläutern, um zu vermeiden, dass Sie in den Fallstricken jeder Statik stecken bleiben. Wenn Sie weitere Einzelheiten erfahren möchten, lesen Sie bitte die Referenzmaterialien am Ende des Artikels.

1. statische Methode

Wenn eine Methode einen statischen Modifikator hat, wird sie zu einer statischen Methode.

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

Die statische Methode erscheint auf den ersten Blick praktisch (sie sieht einfach aus), da sie aufgerufen werden kann, ohne die Instanz neu zu erstellen. [Um das Schreiben von Komponententests zu vereinfachen, sollte es jedoch nur für die "Routineverarbeitung" verwendet werden](https://qiita.com/flyaway/items/34069ca6ad9ada4c0fef#%E5%95%8F%E9%A1% 8C% E3% 82% 92% E8% A7% A3% E6% B1% BA% E3% 81% 99% E3% 82% 8B% E3% 81% 9F% E3% 82% 81% E3% 81% AE% E5% 8E% 9F% E5% 89% 87% E3% 83% AB% E3% 83% BC% E3% 83% AB).

2. statisches Feld

Wenn ein Feld einen statischen Modifikator hat, wird es zu einem statischen Feld.

public static final double PI = 3.14159265358979323846;

Wie oben erwähnt, kann es als Konstante verwendet werden, indem ** es zusammen mit dem endgültigen Modifikator verwendet wird. Durch die Verwendung zusammen mit dem endgültigen Modifikator können Fehler wie das Umschreiben des Werts irgendwo im Programm und die Ausgabe eines falschen Berechnungsergebnisses verhindert werden.

Je nach Systemdesign kann damit auch ein Cache gespeichert werden.

3. [Für fortgeschrittene Benutzer] statischer Import

Es ist möglich, statische Felder und statische Methoden externer Klassen aufzurufen, ohne einen Klassennamen anzugeben.

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;

public class SampleTest {
    @Test
    public void Test() {
        assertThat("foo", is("foo"));
    }
}

Im obigen Beispiel können "Assert.assertThat" und "Matchers.is" durch Weglassen des Klassennamens beschrieben werden.

4. [Für fortgeschrittene Benutzer] statische innere Klasse

Wenn der statische Modifikator der inneren Klasse zugewiesen wird, wird er zu einer statischen inneren Klasse.

public class Outer {
  public static class Inner {
    //statische innere Klasse
  }
}

Nicht statische innere Klassen können auch auf die Felder und Instanzmethoden der übergeordneten Klasse zugreifen. Daher enthält es einen Verweis auf die übergeordnete Klasse.

Unnötige Verweise auf die Elternklasse können sich jedoch nachteilig auf das Gedächtnis und die GC auswirken [^ 1]. ** Wenn die innere Klasse statisch gemacht werden kann, sollte sie statisch gemacht werden ** [^ 2].

5. [Für fortgeschrittene Benutzer] statischer Initialisierer

Der im folgenden Block beschriebene Prozess wird aufgerufen, wenn zum ersten Mal auf die Klasse zugegriffen wird.

static {
  //wird bearbeitet
}

Insbesondere wird es zum Initialisieren einer Sammlung statischer Felder verwendet [^ 3].

public static final List<String> LIST;
static {
    List<String> tmp = new ArrayList<>();
    tmp.add("foo");
    tmp.add("bar");
    LIST = Collections.unmodifiableList(tmp);
}

Referenzmaterial

Recommended Posts

Eine kurze Erklärung der fünf Arten von Java Static
Messen Sie die Größe eines Ordners mit Java
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
Ein kurzer Überblick über Java, das in Klasse 4 gelernt wurde
Ein kurzer Überblick über Java, das in Klasse 3 gelernt wurde
Ein kurzer Überblick über Java, das in Klasse 2 gelernt wurde
Liste der in Java 9 hinzugefügten Typen
Rufen Sie die öffentliche URL der privaten Datei von Flickr in Java ab
Erstellen wir eine TODO-Anwendung mit Java 1 Kurze Erläuterung von MVC
Lassen Sie uns eine TODO-App in Java 5 erstellen. Schalten Sie die Anzeige von TODO um
Ein kurzer Rückblick auf Java in den letzten fünf Jahren
Holen Sie sich das Ergebnis von POST in Java
Die Geschichte des Schreibens von Java in Emacs
Erhöhen Sie dynamisch die Anzahl der Elemente in einem zweidimensionalen Java-Array (mehrdimensionales Array).
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
Finden Sie das Maximum und Minimum der fünf in Java eingegebenen Zahlen
Die Geschichte des einfachen String-Vergleichs in Java
[Java] Behandlung von Java Beans in der Methodenkette
Die Geschichte eines gewöhnlichen Othello in Java
Über die Idee anonymer Klassen in Java
Eine Geschichte über das JDK in der Java 11-Ära
Die Geschichte des Lernens von Java in der ersten Programmierung
Spüren Sie den Lauf der Zeit auch in Java
Importieren Sie Dateien derselben Hierarchie in Java
Überprüfen Sie das ID-Token eines von AWS Cognito in Java authentifizierten Benutzers
Beispielcode zum Abrufen der wichtigsten SQL-Typwerte in Java + MySQL 8.0
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
Geben Sie die statische Ressourcencodierung in Spring Boot an
Ein Hinweis zum Initialisieren von Feldern im Java-Lernprogramm
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
[Java] Beim Schreiben der Quelle ... Memorandum ①
Ich habe die Typen und Grundlagen von Java-Ausnahmen zusammengefasst
Ändern Sie die Speicherqualität von JPEG-Bildern in Java
Eine Übersicht über das native Java-Framework Quarkus von Kubernetes
Fassen Sie die zusätzlichen Elemente der optionalen Klasse in Java 9 zusammen
[Java] Ganzzahlige Informationen von Zeichen in der Textdatei, die mit der Methode read () erfasst wurden
Verstehe in 3 Minuten! Eine sehr grobe Erklärung des Unterschieds zwischen Sitzung und Cookie
Wurde im Basisjahr der Java-Kalenderwoche durchgeführt
Eine kurze Erklärung eines Labyrinthspiels, das in Java für Cousins der Grundschule erstellt wurde
Erstellen wir eine Taschenrechner-App mit Java ~ Zeigen Sie das Anwendungsfenster an
Überprüfen Sie die Abhängigkeit eines bestimmten Maven-Artefakts in Coursier
Ein Programm (Java), das die Summe von ungeraden und geraden Zahlen in einem Array ausgibt
In Anbetracht der Einführung der Java-Sprache in der Reiwa-Ära ~ Auswahl eines sicheren SDK
Aktivieren Sie die Zelle A1 jeder Excel-Datei mit Java
Beispielcode zum Abrufen der Werte der wichtigsten SQL-Typen in Java + Oracle Database 12c
Suchen Sie eine Teilmenge in Java
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
Zählen Sie die Anzahl der Stellen nach dem Dezimalpunkt in Java
Ein Programm, das die Anzahl der Wörter in einer Liste zählt
So leiten Sie den letzten Tag des Monats in Java ab
Ich habe einen RESAS-API-Client in Java erstellt
Vorteile der statischen Java-Methode
Java-Implementierung von Tri-Tree