[Für Anfänger] Erläuterung von Klassen, Instanzen und Statik in Java

Über dieses Material

Wir trainieren Java mit "Introduction to Java 2nd Edition". Ich denke, dieses Buch ist ziemlich einfach, aber es geht immer noch um eine objektorientierte Erklärung, und es scheint, dass ich oft keinen Hunger habe, wenn es um "Instanzen" geht.

Das Buch sagt:

"Wenn Sie der Meinung sind, dass die Klasse mit der" Form "in der Kunststoffmodellfabrik identisch ist ..." (S.302) "Es ist" * Instanz * ", die in der virtuellen Welt ausgeführt wird, und die Form zum Erstellen dieser Instanz ist" * Klasse * ". (S. 303)

Hinweis: "Virtuelle Welt" bedeutet hier JVM. (S.283)

Es ist eine abstrakte Geschichte, daher denke ich, dass es ein guter Weg ist, sich ein Bild zu machen. Wenn es jedoch darum geht, es tatsächlich zu verwenden, muss es meiner Meinung nach etwas konkreter erklärt werden.

Zielgruppe dieses Kommentars

Es ist für folgende Personen gedacht.

Zweck und Umfang dieses Materials

Ziel ist es, Ihnen einen Überblick über die Funktionsweise im Speicher der JVM zu geben und Ihnen ein besseres Verständnis für die Codierung zu vermitteln.

--Klasse

Die folgenden Punkte sind ausgeschlossen.

Kommentar

1. Klassenladen

Die Klasse wird in den Speicher der JVM geladen, wenn sie von der Anwendung verwendet werden soll. Die Klasse wird von Java geladen, sodass sich der Programmierer keine Sorgen machen muss.

Cleric.java


class Cleric {
    private String name;
    private int hp;

    public Cleric(String name, int hp) {
        this.name = name;
        this.hp = hp;
    }
    public String toString(){
        return this.name + " HP:" + this.hp;
    }
}

↑ Bild ↓ Class1.png

Allein damit können Sie nur die Klasse und nicht die Mitglieder laden. Dies liegt daran, dass es nicht instanziiert wird, nur Name und HP definiert sind und weder Name noch HP im Speicher zugewiesen sind.

2. Instanziierung

Verwenden wir neu.

ClericQuest.java


class ClericQuest {
    public static void main(String[] args) {
        Cleric cleric1 = new Cleric("John", 50);//Neu hier
        System.out.println(cleric1.getName());//Greifen Sie auf die neue Instanz zu
    }
}

↑ Bild ↓ Class2.png Wenn Sie neu ausführen, wird die Instanz im Speicher der JVM gesichert. Mitglieder sind auch dabei. Jetzt können Sie auch Name und HP verwenden.

Sie können mehrere Instanzen erstellen.

ClericQuest.java


class ClericQuest {
    public static void main(String[] args) {
        Cleric cleric1 = new Cleric("John", 50); //Das erste neue
        Cleric cleric2 = new Cleric("Taro", 55); //Zweiter neuer
        Cleric cleric3 = new Cleric("Mary", 65535); //Dritter neu
        System.out.println(cleric1);
        System.out.println(cleric2);
        System.out.println(cleric3);
    }
}

↑ Bild ↓ Class3.png

Mitglieder jeder Instanz werden separat im Speicher zugeordnet. In diesem Beispiel wirkt sich der Name von cleric1 nicht auf den Namen von cleric2 aus.

3. Was ist mit statisch?

Das Obige lässt die Erklärung der Statik aus, daher werden wir die Statik erklären.

statisch wird übersetzt als "statisch". Es ist von Anfang an reserviert und kann nicht erhöht oder verringert werden. Andererseits bedeutet "dynamisch", dass es willkürlich erhöht oder verringert werden kann. Bisher ging es um dynamische Elemente (= nicht statische Elemente), die die Anzahl der Instanzen um neue erhöhen können.

Statische Mitglieder werden beim Laden der Klasse im Speicher der JVM zugewiesen.

Cleric.java


class Cleric {
    private String name;
    private int hp;
    private static int countMember = 0; //Anzahl der Instanzen von Klerikern. statisch

    public Cleric(String name, int hp) {
        this.name = name;
        this.hp = hp;
        Cleric.countMember ++;
    }
    public String toString(){
        return this.name + " HP:" + this.hp;
    }
    public static int getCountMember(){
        return Cleric.countMember;
    }
}

ClericQuest.java


class ClericQuest {
    public static void main(String[] args) {
        System.out.println("Die Anzahl der Leute" + Cleric.getCountMember());//0 wird angezeigt
        Cleric cleric1 = new Cleric("John", 50);
        Cleric cleric2 = new Cleric("Taro", 55);
        Cleric cleric3 = new Cleric("Mary", 65535);
        System.out.println(cleric1);
        System.out.println(cleric2);
        System.out.println(cleric3);
        System.out.println("Die Anzahl der Leute" + Cleric.getCountMember());//3 wird angezeigt
    }
}

↑ Bild ↓ Class4.png

Durch die Instanziierung werden statische Elemente nicht erhöht.

Infolgedessen weisen statische Elemente die folgenden Eigenschaften auf:

  1. Nicht an eine Instanz gebunden. Nur mit der Klasse verknüpfen.
  2. Kann ohne Instanziierung verwendet werden (neu).
  3. Von allen Instanzen geteilt.
  4. Nicht statische Elemente sind nicht (direkt) über statische Methoden verfügbar.
  5. Kann nicht erben. (Es ist möglich, denselben Namen in einer Unterklasse zu definieren, dies ist jedoch irrelevant.)

Ergänzung

FAQ (Fragen, die wahrscheinlich gestellt werden)

Wenn statisch nicht an eine Instanz gebunden ist, ist es sinnvoll, sie einer Klasse zuzuordnen? → Wenn Sie über Klassendesign wie Kapselung nachdenken, ist es sinnvoll, Mitglied der Klasse zu sein.

Es heißt "1. Es ist nicht an eine Instanz gebunden", aber stimmt es mit "3. Es wird von allen Instanzen geteilt" überein? → Da "1. Es ist nicht mit der Instanz verknüpft", wird es, wenn es auf "public static" gesetzt ist, vom gesamten Programm gemeinsam genutzt. Wenn es jedoch auf "private static" gesetzt ist, kann nur von derselben Klasse aus darauf zugegriffen werden, sodass es wie folgt beschrieben wird.

Es heißt "1. Es ist nicht an eine Instanz gebunden", aber Sie können es als "Instanz" schreiben. "Statischer Mitgliedsname". → Die Beschreibung "Instanz". "Statischer Mitgliedsname" verursacht keinen Kompilierungsfehler, ist jedoch nicht korrekt. Sollte "Klassenname" sein. "Statischer Mitgliedsname". (Wenn es sich um Ihre eigene Klasse handelt, benötigen Sie den Teil mit dem Klassennamen natürlich nicht.)

Du benutzt toString nicht, oder? → Es macht Spaß für zukünftige Studien.

Apropos

Ich denke, das Verständnis der Instanz ist einer der ersten Stolpersteine. Mit diesem Verständnis können Sie andere Java-ähnliche Programmiersprachen verstehen.

Ich spreche über Klassen und Instanzen, aber ich denke, dass das Verständnis der Statik Ihnen hilft, Instanzen besser zu verstehen.

Recommended Posts

[Für Anfänger] Erläuterung von Klassen, Instanzen und Statik in Java
Klassen und Instanzen Java für Anfänger
Java (Klasse und Instanz)
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
In der Abbildung verstandene Java-Klassen und -Instanzen
Java Häufig verwendete Anweisungsliste (für Anfänger und Anfänger)
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Anfänger spielen Janken-Spiele in Java
Java für Anfänger, Ausdrücke und Operatoren 1
[Für Anfänger] Führen Sie Selenium auf Java aus
Java für Anfänger, Ausdrücke und Operatoren 2
Erklärung von Ruby on Rails für Anfänger ⑤ ~ Datenbank bearbeiten und löschen ~
[Für Anfänger] Unterschied zwischen Java und Kotlin
Java-Programmierung (Klassen und Instanzen, Hauptmethoden)
Erklärung von Ruby auf Schienen für Anfänger ①
Diskriminierung von Enum in Java 7 und höher
Ich habe EX25 des AtCoder Programming Guide für Anfänger (APG4b) in Java geschrieben.
Über die Idee anonymer Klassen in Java
[Java] Persönliche Zusammenfassung der Klassen und Methoden (grundlegend)
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
Eine Sammlung einfacher Fragen für Java-Anfänger
[Einführung in Java] Grundlagen der Java-Arithmetik (für Anfänger)
[Ruby] Klassen und Instanzen
Java-Klasse, Instanz, Objekt
Über Klassen und Instanzen
Ruby-Klassen und -Instanzen
[Für Anfänger] Verstehen Sie schnell die Grundlagen von Java 8 Lambda
Unterschiede zwischen Klassen und Instanzen in Ruby
[Für Anfänger] Mindestbeispiel für die Anzeige von RecyclerView in Java
Verwendbarkeit von Datums- und Zeitklasse in jeder Sprache
Einführung in Java für Anfänger Grundkenntnisse der Java-Sprache ①
Dies und das zum Bearbeiten von ini in Java. : inieditor-java
Verwendung von Abstract Class und Interface in Java richtig
Erklärung von Ruby auf Schienen für Anfänger ⑥ ~ Erstellung der Validierung ~
Erklärung von Ruby on Rails für Anfänger ② ~ Links erstellen ~
Äquivalenter Vergleich von Java-Wrapper-Klasse und primitivem Typ
Erklärung von Ruby on Rails für Anfänger ⑦ ~ Flash-Implementierung ~
Erklärung von Ruby on Rails für Anfänger ④ ~ Informationen zu Benennungsregeln und zur Verwendung von form_Tag ~
Eine kurze Erklärung eines Labyrinthspiels, das in Java für Cousins der Grundschule erstellt wurde
In Java 2D-Karte speichern und mit for-Anweisung drehen
[Java] Machen Sie die Variablen der erweiterten for-Anweisung und für jede Anweisung unveränderlich
Eine kurze Erklärung der fünf Arten von Java Static
[Java] Anfängerverständnis von Servlet-②
Java-Debug-Ausführung [für Java-Anfänger]
[Java] Grundlegende Aussage für Anfänger
[Java] Generics-Klasse und Generics-Methode
[Java] Anfängerverständnis von Servlet-①
Java-Anfänger fassten das Verhalten von Array und ArrayList kurz zusammen
Über Klassen und Instanzen (Evolution)
Überlegungen zu Klassen und Instanzen
Java für Anfänger, Daten verstecken
StringUtils.isNotBlank eignet sich für Leerurteile und Nullurteile in Java
Tipps zur Verwendung von Salesforce SOAP und Bulk API in Java