[Pour les débutants] Explication des classes, des instances et des statiques en Java

À propos de ce matériel

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.

Public cible de ce commentaire

Il est destiné aux personnes suivantes.

Objectif et portée de ce document

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

Commentaire

1. Chargement de classe

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 ↓ Class1.png

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.

2. Instanciation

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 ↓ Class2.png 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 ↓ Class3.png

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.

3. Qu'en est-il de l'électricité statique?

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 ↓ Class4.png

L'instanciation n'augmente pas les membres statiques.

Par conséquent, les membres statiques ont les caractéristiques suivantes:

  1. Non lié à une instance. Associez-vous uniquement à la classe.
  2. Peut être utilisé sans instanciation (nouveau).
  3. Partagé par toutes les instances.
  4. Les membres non statiques ne sont pas disponibles (directement) à partir des méthodes statiques.
  5. Impossible d'hériter. (Il est possible de définir le même nom dans une sous-classe, mais ce n'est pas pertinent.)

Supplément

FAQ (questions susceptibles d'être posées)

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.

Au fait

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

[Pour les débutants] Explication des classes, des instances et des statiques en Java
Classes et instances Java pour les débutants
java (classe et instance)
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
Classes et instances Java comprises dans la figure
Liste des instructions Java fréquemment utilisées (pour les débutants et les débutants)
[Pour les débutants] Résumé du constructeur java
Les débutants jouent à des jeux Janken en Java
Java pour les débutants, les expressions et les opérateurs 1
[Pour les débutants] Exécutez Selenium sur Java
Java pour les débutants, les expressions et les opérateurs 2
Explication de Ruby on rails pour les débutants ⑤ ~ Modifier et supprimer la base de données ~
[Pour les débutants] Différence entre Java et Kotlin
Programmation Java (classes et instances, méthodes principales)
Explication de Ruby sur rails pour les débutants ①
Discrimination d'énum dans Java 7 et supérieur
J'ai écrit EX25 du guide de programmation AtCoder pour les débutants (APG4b) en java.
À propos de l'idée des classes anonymes en Java
[Java] Résumé personnel des classes et méthodes (basique)
Différences dans l'écriture des classes Java, C # et Javascript
Une collection de questions simples pour les débutants Java
[Introduction à Java] Bases de l'arithmétique Java (pour les débutants)
[Ruby] Classes et instances
classe java, instance, objet
À propos des classes et des instances
Classes et instances Ruby
[Pour les débutants] Comprendre rapidement les bases de Java 8 lambda
Différences entre les classes et les instances dans Ruby
[Pour les débutants] Exemple minimum pour afficher RecyclerView en Java
Convivialité de la classe de date et d'heure dans chaque langue
Introduction à Java pour les débutants Connaissance de base du langage Java ①
Ceci et cela pour éditer ini en Java. : inieditor-java
Utilisation correcte de la classe abstraite et de l'interface en Java
Explication de Ruby sur rails pour les débutants ⑥ ~ Création de validation ~
Explication de Ruby on rails pour les débutants ② ~ Création de liens ~
Comparaison équivalente de la classe wrapper Java et du type primitif
Explication de Ruby on rails pour les débutants ⑦ ~ Implémentation Flash ~
Explication de Ruby on rails pour les débutants ④ ~ À propos des règles de dénomination et comment utiliser form_Tag ~
Une brève explication d'un jeu de labyrinthe fait à Java pour les cousins du primaire
Stocker dans une carte Java 2D et tourner avec pour instruction
[Java] Rendre les variables de l'instruction for étendue et de chaque instruction immuables
Une explication rapide des cinq types de statique Java
[Java] Compréhension débutante de Servlet-②
Exécution de débogage Java [pour les débutants Java]
[Java] Instruction de base pour les débutants
[Java] Classe générique et méthode générique
[Java] Compréhension débutante de Servlet-①
Les débutants en Java ont brièvement résumé le comportement de Array et ArrayList
À propos des classes et des instances (évolution)
Prise en compte des classes et des instances
Java pour les débutants, masquage des données
StringUtils.isNotBlank est pratique pour un jugement vide et un jugement nul en java
Conseils d'utilisation de Salesforce SOAP et de l'API Bulk en Java