Nous formons Java en utilisant "Introduction à Java 2nd Edition". Je pense que ce livre est assez simple, mais il entre toujours dans une explication orientée objet et n'a souvent pas faim en ce qui concerne les «instances».
Le livre déclare:
"Si vous pensez que la classe est la même que le" moule "dans la fabrique de modèles en plastique ..." (P.302) "C'est" * instance * "qui opère dans le monde virtuel, et le moule pour créer cette instance est" * class * ". (P.303)
Remarque: «Monde virtuel» signifie ici JVM. (P.283)
C'est une histoire abstraite, donc je pense que c'est un bon moyen d'obtenir une image. Cependant, quand il s'agit de l'utiliser réellement, je pense qu'il faut une explication un peu plus concrète.
Il est destiné aux personnes suivantes.
Le but est de vous donner un aperçu de son fonctionnement dans la mémoire de la JVM et de vous donner une meilleure compréhension du codage.
--Classe
Les éléments suivants sont exclus.
--Encapsulation, modificateur d'accès
La classe est chargée dans la mémoire de la JVM lorsqu'elle doit être utilisée par l'application. La classe est chargée par Java, donc le programmeur n'a pas à s'en soucier.
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;
}
}
↑ image ↓
Avec cela seul, vous ne pouvez charger que la classe et non les membres. En effet, il n'est pas instancié, seuls le nom et hp sont définis et ni le nom ni hp ne sont alloués en mémoire.
Utilisons new.
ClericQuest.java
class ClericQuest {
public static void main(String[] args) {
Cleric cleric1 = new Cleric("John", 50);//Nouveau ici
System.out.println(cleric1.getName());//Accéder à la nouvelle instance
}
}
↑ image ↓ En faisant new, l'instance sera sécurisée dans la mémoire de la JVM. Les membres y sont également. Désormais, vous pouvez également utiliser name et hp.
Vous pouvez créer plusieurs instances.
ClericQuest.java
class ClericQuest {
public static void main(String[] args) {
Cleric cleric1 = new Cleric("John", 50); //Le premier nouveau
Cleric cleric2 = new Cleric("Taro", 55); //Deuxième nouveau
Cleric cleric3 = new Cleric("Mary", 65535); //Troisième nouveau
System.out.println(cleric1);
System.out.println(cleric2);
System.out.println(cleric3);
}
}
↑ image ↓
Les membres de chaque instance sont alloués séparément en mémoire. Dans cet exemple, le nom du clerc1 n'affecte pas le nom du clerc2.
Ce qui précède omet l'explication de statique, nous allons donc expliquer statique.
statique est traduit par «statique». Il est réservé dès le début et ne peut être ni augmenté ni diminué. D'autre part, «dynamique» signifie qu'il peut être augmenté ou diminué de manière arbitraire. Jusqu'à présent, l'explication concernait les membres dynamiques (= membres non statiques) qui peuvent augmenter le nombre d'instances de nouveaux.
Les membres statiques sont alloués dans la mémoire de la JVM lorsque la classe est chargée.
Cleric.java
class Cleric {
private String name;
private int hp;
private static int countMember = 0; //Nombre d'instances de Clerc. statique
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("Le nombre de personnes" + Cleric.getCountMember());//0 est affiché
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("Le nombre de personnes" + Cleric.getCountMember());//3 s'affiche
}
}
↑ image ↓
L'instanciation n'augmente pas les membres statiques.
Par conséquent, les membres statiques ont les caractéristiques suivantes:
Si statique n'est pas lié à une instance, est-il judicieux de le placer dans une classe? → Quand on pense à la conception de classe telle que l'encapsulation, il est logique d'être membre de la classe.
Il dit "1. Il n'est pas lié à une instance", mais est-il cohérent avec "3. Il est partagé par toutes les instances"? → Depuis "1. Il n'est pas lié à l'instance", s'il est défini sur public static, il sera partagé par l'ensemble du programme, mais s'il est défini sur private static, il ne peut être accédé qu'à partir de la même classe, il est donc décrit comme ceci.
Il dit "1. Il n'est pas lié à une instance", mais vous pouvez l'écrire comme "instance". "Nom de membre statique". → La description "instance". "Nom de membre statique" ne provoque pas d'erreur de compilation, mais ce n'est pas correct. Doit être "nom de classe". "Nom de membre statique". (Bien sûr, s'il s'agit de votre propre classe, vous n'avez pas besoin de la partie nom de la classe.)
Vous n'utilisez pas toString, non? → C'est amusant pour les études futures.
Je pense que la compréhension de l'instance est l'une des premières pierres d'achoppement. Avec cette compréhension, vous pouvez comprendre d'autres langages de programmation de type Java.
Je parle de classes et d'instances, mais je pense que comprendre la statique vous aidera à mieux comprendre les instances.
Recommended Posts