Maison >Java >javaDidacticiel >Quelle est la différence entre les variables statiques Java et les variables d'instance ?

Quelle est la différence entre les variables statiques Java et les variables d'instance ?

WBOY
WBOYavant
2023-05-05 15:40:071736parcourir

Il existe deux types de variables membres de la classe

java : l'une est une variable modifiée par le mot-clé static, qui est appelée variable de classe ou variable statique ; l'autre n'est pas modifiée par static et est une variable d'instance ; .

La différence de définition grammaticale : le mot-clé static doit être ajouté avant les variables statiques, mais pas avant les variables d'instance.

La différence lorsque le programme est en cours d'exécution : les variables d'instance appartiennent aux attributs d'un objet. Un objet d'instance doit être créé avant que la variable d'instance qu'il contient se voit allouer de l'espace, puis cette variable d'instance peut être utilisée. Les variables statiques n'appartiennent pas à un objet instance, mais à une classe, elles sont donc également appelées variables de classe. Tant que le programme charge le bytecode de la classe sans créer d'objet instance, les variables statiques se verront allouer de l'espace, et le des variables statiques peuvent être utilisées. En bref, les variables d'instance doivent créer un objet avant de pouvoir être utilisées via cet objet, tandis que les variables statiques peuvent être référencées directement à l'aide du nom de classe.

Par exemple, pour le programme suivant, quel que soit le nombre d'objets d'instance créés, une seule variable staticVar est toujours allouée, et chaque fois qu'un objet d'instance est créé, cette staticVar sera cependant augmentée de 1 ; objet est créé, il sera alloué. Une instanceVar signifie que plusieurs instanceVar peuvent être allouées et la valeur de chaque instanceVar n'est incrémentée qu'une seule fois.

public class VariantTest  {  public static int staticVar = 0;  public int instanceVar = 0;  public VariantTest()  {  staticVar++;  instanceVar++;  System.out.println(“staticVar = ”++staticVar “, instanceVar = ” ++instanceVar);  }  }

Il n'y a qu'une seule variable statique d'une classe dans la mémoire. La machine virtuelle Java alloue de la mémoire pour la variable statique pendant le processus de chargement de la classe. La variable statique est située dans la zone de méthode et est partagée par toutes les instances de. la classe. Les variables statiques sont accessibles directement via le nom de la classe et leur cycle de vie dépend du cycle de vie de la classe.

Et les variables d'instance dépendent de l'instance de la classe. Chaque fois qu'une instance est créée, la machine virtuelle Java alloue de la mémoire pour les variables d'instance. Les variables d'instance sont situées dans la zone de tas et leur cycle de vie dépend du cycle de vie de l'instance.

public class Temp {  int t; //实例变量  public static void main(String args[]){  int t=1; //局部变量  System.out.println(t); //打印局部变量  Temp a= new Temp(); //创建实例  System.out.println(a.t); //通过实例访问实例变量  }  }

Le résultat est :

1

0 (les variables membres ont des valeurs par défaut mais pas les variables locales)

Changez le code en :

public class Temp {  static int t; //类变量  public static void main(String args[]){  System.out.println(t); //打印类变量  int t=1; //局部变量  System.out.println(t); //打印局部变量  Temp a= new Temp(); //创建实例  System.out.println(a.t); //通过实例访问实例变量  }  }

Le résultat est

0

1

0

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer