Statique signifie « global » ou « statique » et est utilisé pour modifier les variables membres et les méthodes membres. Il peut également former un bloc de code statique, mais il n'y a pas de concept de variables globales dans le langage Java.
Les variables membres et les méthodes membres modifiées par static sont indépendantes de tout objet de la classe. Autrement dit, cela ne dépend pas d’une instance spécifique de la classe et est partagé par toutes les instances de la classe.
Tant que cette classe est chargée, la machine virtuelle Java peut les trouver par défaut dans la zone méthode de la zone de données d'exécution en fonction du nom de la classe. Par conséquent, un objet statique est accessible avant la création de l’un de ses objets, sans référencer aucun objet.
Les variables membres statiques et les méthodes membres modifiées avec public sont essentiellement des variables globales et des méthodes globales. Lorsqu'un objet de sa classe est déclaré, une copie de la variable statique n'est pas générée, mais toutes les instances de la classe partagent la même variable statique.
Une variable statique peut être précédée d'une modification privée, ce qui signifie que cette variable peut être utilisée dans le bloc de code statique de la classe, ou dans d'autres méthodes membres statiques de la classe (bien sûr, elle peut également être utilisée dans des méthodes non statiques). méthodes membres), mais il ne peut pas être utilisé dans d’autres classes. Il est important de faire référence directement au nom de la classe. En fait, vous devez comprendre que privé signifie restriction d'autorisation d'accès, et statique signifie qu'il peut être utilisé sans instanciation, ce qui est beaucoup plus facile à comprendre. L'effet de l'ajout d'autres mots-clés d'autorisation d'accès avant static est également le même.
Les variables membres et les méthodes membres modifiées par static sont généralement appelées variables statiques et méthodes statiques. Elles sont accessibles directement via le nom de la classe.
Nom de la classe. Nom de la méthode statique (liste de paramètres...)
Nom de la classe. Nom de la variable statique
Un bloc de code modifié avec static représente un bloc de code statique Lorsque la machine virtuelle Java (JVM) charge une classe, le bloc de code sera exécuté (très utile, haha).
1. variable statique
Les variables membres de classe peuvent être classées en deux types selon qu'elles sont statiques : l'une est une variable modifiée par statique, appelée variable statique ou variable de classe ; l'autre est une variable non modifiée par statique, appelée variable d'instance.
La différence entre les deux est :
Pour les variables statiques, il n'y a qu'une seule copie en mémoire (pour économiser de la mémoire). La JVM n'alloue de la mémoire qu'une seule fois pour les variables statiques. L'allocation de mémoire des variables statiques est terminée lors du processus de chargement de la classe. Elle est accessible directement par. le nom de la classe (pratique). Bien entendu, il est également accessible via les objets Visit (mais ce n'est pas recommandé).
Pour les variables d'instance, avant la création d'une instance, la mémoire sera allouée une fois pour la variable d'instance. Les variables d'instance peuvent avoir plusieurs copies dans la mémoire sans s'affecter les unes les autres (flexible).
Par conséquent, les variables statiques sont généralement utilisées lorsque les deux fonctions suivantes doivent être implémentées :
1).Lors du partage de valeurs entre objets
2).Lorsque l’accès aux variables est pratique
2. Méthode statique
Les méthodes statiques peuvent être appelées directement via le nom de la classe, et n'importe quelle instance peut également être appelée.
Par conséquent, les mots-clés this et super ne peuvent pas être utilisés dans les méthodes statiques, et les variables d'instance et les méthodes d'instance de la classe à laquelle elles appartiennent ne sont pas directement accessibles (c'est-à-dire les variables membres et les méthodes membres sans variables membres statiques uniquement et). les méthodes membres de la classe à laquelle elles appartiennent sont accessibles.
Parce que les membres d’une instance sont associés à des objets spécifiques ! Cela doit être compris et compris, pas mémorisé ! ! !
Étant donné que les méthodes statiques sont indépendantes de toute instance, les méthodes statiques doivent être implémentées et ne peuvent pas être abstraites.
Par exemple, afin de faciliter l'appel de méthode, toutes les méthodes de la classe Math de l'API Java sont statiques, et les méthodes statiques des classes générales facilitent également l'appel de la méthode par d'autres classes.
Une méthode statique est un type spécial de méthode à l'intérieur d'une classe. La méthode correspondante n'est déclarée statique que lorsque cela est nécessaire. Les méthodes à l'intérieur d'une classe sont généralement non statiques.
3. bloc de code statique
Un bloc de code statique est également appelé bloc de code statique. Il s'agit d'un bloc d'instructions statique dans une classe qui est indépendant des membres de la classe. Il peut y en avoir plusieurs et peut être placé n'importe où. sera exécuté lorsque la JVM chargera la classe, s'il y a plusieurs blocs de code statiques, la JVM les exécutera dans l'ordre dans lequel ils apparaissent dans la classe, et chaque bloc de code ne sera exécuté qu'une seule fois. Par exemple:
classe publique Test5 {privé statique int a; privé int b; statique{ Test5.a=3; Test5 t=new tf(); println(tb); } static{ Test5.a=4; System.out.println(a); } public static void main(String[] args) { // À FAIRE Générer automatiquement des stubs de méthode} static{ Test5.a=5; System.out.println(a); public void f(){ System.out.println("hhahhahah" } }
Résultats en cours d'exécution :
3
hhahhahah
1000
4
5
Vous pouvez utiliser des blocs de code statiques pour attribuer des valeurs à certaines variables statiques. Enfin, jetez un œil à ces exemples. Ils ont tous une méthode principale statique, afin que la JVM puisse l'appeler directement sans créer d'instance lors de l'exécution de la méthode principale. .
4. Que signifient statique et final lorsqu'ils sont utilisés ensemble ?
Static final est utilisé pour modifier les variables membres et les méthodes membres, qui peuvent être simplement comprises comme des « constantes globales » !
Pour les variables, cela signifie qu'une fois qu'une valeur est donnée, elle ne peut pas être modifiée et est accessible via le nom de la classe.
Pour les méthodes, cela signifie qu’elles ne sont pas remplaçables et sont accessibles directement via le nom de la classe.
Parfois, vous souhaitez définir un membre de classe afin que son utilisation soit complètement indépendante de tout objet de cette classe. Normalement, un membre de classe doit être accessible via un objet de sa classe, mais il est possible de créer un membre qui peut être utilisé seul sans référencer une instance spécifique. Un tel membre peut être créé en ajoutant le mot clé static (static) avant la déclaration du membre. Si un membre est déclaré statique, il est accessible avant la création d'un objet de sa classe sans avoir à référencer un objet. Vous pouvez déclarer les méthodes et les variables comme statiques. L'exemple le plus courant de membre statique est main(). Étant donné que main() doit être appelé lorsque le programme commence son exécution, il est déclaré statique.
Les variables déclarées statiques sont essentiellement des variables globales. Lorsqu'un objet est déclaré, une copie de la variable statique n'est pas produite, mais toutes les variables d'instance de la classe partagent la même variable statique. Les méthodes déclarées statiques ont les restrictions suivantes :
1).Ils ne peuvent appeler que d’autres méthodes statiques.
2).Ils ne peuvent accéder qu’aux données statiques.
3).Ils ne peuvent en aucun cas faire référence à this ou super (le mot-clé super est lié à l'héritage et est décrit dans le chapitre suivant).
Si vous devez initialiser vos variables statiques par calcul, vous pouvez déclarer un bloc statique. Le bloc statique n'est exécuté qu'une seule fois lors du chargement de la classe. L'exemple suivant montre une classe avec une méthode statique, des variables statiques et un bloc d'initialisation statique :
// Démontrer les variables, méthodes et blocs statiques class UseStatic { static int a = 3; static void meth(int x) { System.out.println("x = " + x); println("a = " + a); System.out.println("b = " + b); static { System.out.println("Bloc statique initialisé."); } public static void main(String args[]) { meth(42 } })
Une fois la classe UseStatic chargée, toutes les instructions statiques sont exécutées. Tout d'abord, a est défini sur 3, puis le bloc statique est exécuté (impression d'un message) et enfin, b est initialisé à a*4 ou 12. Ensuite, main() est appelé, main() appelle meth(), en passant la valeur 42 à x. Les trois instructions println() font référence à deux variables statiques a et b et à la variable locale x.
Remarque : Il est illégal de référencer des variables d'instance dans une méthode statique.
Voici le résultat de ce programme :
Copiez le code comme suit :
Bloc statique initialisé.
x = 42
une=3
b = 12
Les méthodes et variables statiques peuvent être utilisées indépendamment de tout objet en dehors de la classe dans laquelle elles sont définies. De cette façon, vous ajoutez simplement l’opérateur point après le nom de la classe. Par exemple, si vous souhaitez appeler une méthode statique depuis l'extérieur de la classe, vous pouvez utiliser le format général suivant :
Copiez le code comme suit :
nom de classe.method()
Ici, classname est le nom de la classe dans laquelle la méthode statique est définie. Comme vous pouvez le voir, ce format est similaire au format d'appel de méthodes non statiques via des variables de référence d'objet. Une variable statique est accessible dans le même format : le nom de la classe suivi de l'opérateur point. C'est ainsi que Java implémente une version contrôlée des fonctions globales et des variables globales.
Ci-dessous un exemple. Dans main(), la méthode statique callme() et la variable statique b sont accessibles en dehors de leurs classes.
class StaticDemo { static int a = 42; static int b = 99; static void callme() { System.out.println("a = " + a } } class StaticByName { public static void main(String args[]) { StaticDemo.callme(); System.out.println("b = " + StaticDemo.b } }
Voici le résultat de ce programme :
Copiez le code comme suit :
a=42
b = 99
Les membres statiques ne sont pas accessibles aux instances créées par leur classe.
Si les membres sans modification statique sont des membres objets, ils appartiennent à chaque objet.
Les membres modifiés avec static sont des membres de classe, ce qui signifie qu'ils peuvent être appelés directement par une classe et sont communs à tous les objets.