[JAVA] Différence entre la variable d'instance et la variable de classe

1.Tout d'abord

La différence entre les variables d'instance et les variables de classe était ambiguë, je les ai donc résumées pour l'avenir. J'espère que cela aide.

2. Qu'est-ce qu'une variable d'instance?

C'est une variable qui appartient à chaque instance. Plus précisément, le ** nouveau mot-clé ** sécurise la zone de variable d'instance (instance), et l'affectation de valeur initiale et le constructeur (processus exécuté lors de la création de l'instance) initialisent la variable d'instance. Notez que les instances créées sont reconnues comme distinctes, de sorte que la valeur de la variable d'instance sera différente pour chaque instance. Par conséquent, il est utilisé lorsque vous souhaitez gérer des informations différentes pour chaque objet (instance de classe).

3. Qu'est-ce qu'une variable de classe?

Il s'agit d'une variable déclarée avec le ** mot-clé statique ** et il s'agit d'informations communes partagées par toutes les instances. La modification de la valeur d'une variable de classe à partir d'un objet affecte tous les autres objets. Par conséquent, il est utilisé lorsque vous souhaitez gérer des informations communes à l'ensemble de l'objet.

Postscript (2020/1/1) Du commentaire de @ shiracamus

S'il existe une relation d'héritage entre les classes, les variables de classe peuvent avoir le même nom pour chaque classe héritée, et toutes les classes héritées sont tracées et la valeur qui est atteinte en premier est utilisée. Par conséquent, même si les variables de classe ont le même nom, leurs valeurs peuvent différer selon la classe de référence. (Ajoutez ici un exemple concret à 5.)

4. Chaque fonction

Variable d'instance Variable de classe
Fonctionnalité Une zone de variable d'instance est sécurisée pour chaque objet créé. Par conséquent, la valeur est différente pour chaque objet. Un seul créé par classe et des valeurs communes sont utilisées pour tous les objets
Durée de vie À partir du moment où un objet est créé jusqu'à sa disparition Du début à la fin du programme
Comment appeler Variable à laquelle l'objet est affecté.Variable d'instance 1.nom de la classe.Variable de classe
2.Variable à laquelle l'objet est affecté.Variable d'instance
Déclaration Nom de la variable de type de modificateur d'accès Modificateur d'accèsmot-clé statiqueSaisissez le nom de la variable
Plage d'influence au moment du changement Uniquement les objets associés aux variables d'instance Tous les objets

5. Exemple spécifique

Variable d'instance

Main.java


public class Main {
  public static void main(String[] args) {
    Sample sampleA = new Sample();
    Sample sampleB = new Sample();
    
    sampleA.a = 10;
    sampleB.a = 20;
    System.out.println(sampleA.a);
    System.out.println(sampleB.a);
  }
}

public class Sample {

  public int a;
}

Résultat de sortie


10
20

J'ai défini des valeurs différentes pour les variables d'instance de chaque objet, donc En conséquence, différentes valeurs sont émises.

Variable de classe

Main.java


public class Main {
  public static void main(String[] args) {
    Sample sampleA = new Sample();
    Sample sampleB = new Sample();

    sampleA.setNum(30);
    sampleB.setNum(40);
    System.out.println(sampleA.getNum());
    System.out.println(sampleB.getNum());
  }
}

public class Sample {
  
  public static int b;
  
  public void setNum(int value) {
    b = value;
  }

  public int getNum() {
    return b;
  }
}

Résultat de sortie


40
40

Les variables de classe partagent une valeur commune dans toutes les instances Parce que les modifications apportées à un objet affectent d'autres objets En conséquence, le dernier ensemble «40» est affiché comme valeur de la variable de classe.

prime

Main.java



public class Main {
  public static void main(String[] args) {
    var s1 = new Sample();
    var s2 = new Sample();
    System.out.println("Base: " + Base.a + ", " + Base.b);
    System.out.println("Sample: " + Sample.a + ", " + Sample.b);
    System.out.println("s1: " + s1.a + ", " + s1.b);
    System.out.println("s2: " + s2.a + ", " + s2.b);
    Base.a = 10;
    Sample.a = 20;
    s1.a = 30;
    s2.a = 40;
    System.out.println("Base: " + Base.a + ", " + Base.b);
    System.out.println("Sample: " + Sample.a + ", " + Sample.b);
    System.out.println("s1: " + s1.a + ", " + s1.b);
    System.out.println("s2: " + s2.a + ", " + s2.b);
    Base.b = 100;
    Sample.b = 999;
    System.out.println("Base: " + Base.a + ", " + Base.b);
    System.out.println("Sample: " + Sample.a + ", " + Sample.b);
    System.out.println("s1: " + s1.a + ", " + s1.b);
    System.out.println("s2: " + s2.a + ", " + s2.b);
  }
}

class Base {
    static int a = 0;
    static int b = 1;
}

class Sample extends Base {
    static int b = 2;
}

Résultat de sortie


Base: 0, 1
Sample: 0, 2
s1: 0, 2
s2: 0, 2
Base: 40, 1
Sample: 40, 2
s1: 40, 2
s2: 40, 2
Base: 40, 100
Sample: 40, 999
s1: 40, 999
s2: 40, 999

Article de référence

SOFTWARE ENGINEERING [tutorialspoint] (https://www.tutorialspoint.com/What-is-the-difference-between-class-variables-and-instance-variables-in-Java)

Recommended Posts

Différence entre la variable d'instance et la variable de classe
Différence entre classe et instance
Différence entre la variable d'instance Ruby et la variable locale
Différence entre les variables et les variables d'instance
Différence entre interface et classe abstraite
[Java] Différences entre les variables d'instance et les variables de classe
Différence entre vh et%
Différence entre i ++ et ++ i
Facile à comprendre la différence entre la méthode d'instance Ruby et la méthode de classe.
[Java] Différence entre "variable finale" et "objet immuable"
Différence entre produit et variante
Différence entre redirect_to et render
[Java] Différence entre == et égal
Différence entre redirect_to et render
Différence entre CUI et GUI
Différence entre mockito-core et mockito-all
Différence entre l'installation de bundle et de bundle
Relation entre le package et la classe
Différence entre ArrayList et LinkedList
Différence entre render et redirect_to
Différence entre List et ArrayList
Différence entre .bashrc et .bash_profile
Différence entre StringBuilder et StringBuffer
Différence entre render et redirect_to
Différence entre Spring AOP et la classe cible de la bibliothèque
[Ruby] Différence entre obtenir et publier
Différence entre l'opérateur == et la méthode égale
[Docker-compose] Différence entre env_file et environnement. À propos de la priorité de l'application de variable d'environnement
[Java] Différence entre Hashmap et HashTable
[Terminal] Différence entre irb et pry
JavaServlet: différence entre executeQuery et executeUpdate
[Ruby] Différence entre is_a? Et instance_of?
[Rails] Différence entre find et find_by
[JAVA] Différence entre abstrait et interface
Différence entre Thymeleaf @RestController et @Controller
Différence entre Stream map et flatMap
[Java] Différence entre l’affectation d’une variable de type de base et l’affectation d’une variable de type de référence
À propos de la différence entre la classe Applet et la classe JApplet
[Java] Différence entre array et ArrayList
Quelle est la différence entre une action et une méthode d'instance?
Différence entre le type primitif et le type de référence
Différence entre string.getByte () et Hex.decodeHex (string.toCharaArray ())
[Java] Différence entre fermable et fermable automatiquement
[Java] Différence entre StringBuffer et StringBuilder
[Java] Différence entre longueur, longueur () et taille ()
[rails] Différence entre redirect_to et render
[Android] Différence entre finish () et return;
[Ruby] Peut-être que vous ne comprenez pas vraiment? [Différence entre la classe et le module]
[Ruby] Relation entre la classe parent et la classe enfant. Relation entre classe et instance.
[Java] Structure d'introduction Définition de classe Relation entre classe et instance Format de définition de méthode
Remarque: Différence entre Ruby "p" et "met"
Différence entre final et immuable en Java
[Remarque] Différence entre l'installation et la mise à jour du bundle
Différence entre pop () et peek () dans la pile