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.
Es ist für folgende Personen gedacht.
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.
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 ↓
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.
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 ↓ 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 ↓
Mitglieder jeder Instanz werden separat im Speicher zugeordnet. In diesem Beispiel wirkt sich der Name von cleric1 nicht auf den Namen von cleric2 aus.
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 ↓
Durch die Instanziierung werden statische Elemente nicht erhöht.
Infolgedessen weisen statische Elemente die folgenden Eigenschaften auf:
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.
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