Static est un autre mot clé important de Java. Il peut améliorer les performances en cours d'exécution du programme et optimiser la structure du programme. Ses principales applications sont les suivantes:
1. Les variables membre modifiées par statique, appelées variables de classe / variables statiques, pour réaliser le partage de tous les objets à ce membre.
2. La méthode membre modifiée par statique, appelée méthode de classe / méthode statique, peut être appelée directement via le nom de classe sans créer un objet.
3. Formez des blocs de code statiques pour optimiser les performances du programme.
4. Packages de plomb statiques, importent généralement des méthodes de classe directement dans la classe actuelle, afin que les méthodes de classe puissent être appelées directement en utilisant le nom de la méthode, ce qui est plus pratique.
5. Modifiez la classe intérieure et appelez la classe intérieure sans instanier la classe extérieure.
La description du code suivante est jointe:
classe publique Student {String Name; Âge statique; public String toString () {return "name:" + name + ", âge:" + âge; } public static void main (String [] args) {Student S1 = new Student (); S1.NAME = "Zhang San"; S1.age = 20; Student S2 = New Student (); s2.Name = "li si"; s2.age = 10; System.out.println (S1); System.out.println (S2); }} / ** Nom du résultat de sortie: Zhang San, âge: 10Name: Li si, âge: 10 * /Comme mentionné ci-dessus, les deux objets S1 et S2 sont stockés dans différentes adresses dans la zone du tas en mémoire, ils ne s'interféreront donc pas entre eux. Cependant, le mot-clé statique modifie l'âge variable du membre, ce qui fait que la classe appartient plutôt que l'objet lui appartient, et tout objet dans l'instance de cette classe peut être partagé et utilisé. Par conséquent, les âges de sortie sont tous définitifs à 10. Si vous supprimez statique, évidemment, les objets ne se affecteront pas mutuellement et la sortie est la suivante:
Nom: Zhang San, Âge: 20 Name: Li si, âge: 10
Comme mentionné ci-dessus, une erreur s'est produite lorsque OUT1 appelle 2. À partir de ce code, on peut voir que les méthodes statiques ne peuvent pas appeler les variables des membres non statiques et les méthodes des membres. Les méthodes non statiques peuvent appeler des variables de membres statiques et des méthodes membres. Notez que la statique n'affecte pas les droits d'accès des membres. Les mots clés qui peuvent affecter les droits d'accès en Java sont privés, publics, protégés et par défaut.
Le test de classe publique étend la base {statique {System.out.println ("Bloc statique statique 1"); } public test () {System.out.println ("Test Constructor"); } public static void main (String [] args) {new test (); }} classe Base {static {System.out.println ("Bloc statique statique 2"); } public base () {System.out.println ("Constructeur de base"); }}Comme mentionné ci-dessus, n'oubliez pas deux phrases, le bloc de code statique est chargé avec le chargement de la classe. La méthode variable modifiée par statique est chargée en premier et une seule fois que les autres méthodes variables. Lorsqu'une sous-classe est chargée, la classe parent sera chargée en premier. À partir de cela, nous pouvons analyser: au début de l'exécution, nous devons d'abord trouver la méthode principale, car la méthode principale est l'entrée du programme, mais avant d'exécuter la méthode principale, nous devons d'abord charger la classe de test. Lors du chargement de la classe de test, nous constatons que la classe de test hérite de la classe de base, nous nous tournerons donc pour charger d'abord la classe de base. Lors du chargement de la classe de base, nous constatons qu'il existe un bloc statique, puis exécutez le bloc statique. Une fois la classe de base chargée, la classe de test continue de se charger, puis constate qu'il y a des blocs statiques dans la classe de test, de sorte que le bloc statique est exécuté. Après le chargement de la classe requise, la méthode principale commence à être exécutée. Lors de l'exécution de nouveaux tests () dans la méthode principale, le constructeur de la classe parent sera d'abord appelé, puis le constructeur qui lui est propre. Par conséquent, les résultats de l'opération sont les suivants:
Bloc statique statique 2static Static Block 1base Constructor Constructeur de test
/ * Fichier A.Java * / package com.dogo.test; classe publique a {public static void outword (objet o) {System.out.println (o); }} / * B.Java Fichier * / Importer Static com.dogo.test.a. *; Classe publique B {public static void main (String [] args) {outword ("Hello World!"); } / ** Sortie * Hello World! * /}Comme mentionné ci-dessus, A.Java contient une méthode statique simple. Dans B.Java, nous utilisons le mot-clé statique pour importer la classe A. Par conséquent, il n'est pas nécessaire d'utiliser le "nom de la classe. Nom de la méthode" pour appeler la méthode de classe. Vous pouvez utiliser directement le "nom de la méthode" pour appeler la méthode de classe, tout comme la propre méthode de la classe.
/*Outer.java*/public classe extérieure {statique {system.out.println ("bloc statique extérieur"); } public exter () {System.out.println ("Constructeur externe"); } classe statique inner {statique {System.out.println ("Block statique intérieur"); } public Inner () {System.out.println ("Constructeur intérieur"); }}} / * Test.java * / classe publique test {public static void main (String [] args) {new outer.inner (); }}Comme mentionné ci-dessus, n'oubliez pas de modifier la classe intérieure avec statique, la classe extérieure peut appeler directement la classe intérieure, car la classe intérieure modifiée par statique est chargée lors du chargement de la classe extérieure, afin que vous puissiez appeler directement la classe intérieure statique sans instancier la classe extérieure. Dans l'exemple, avant d'entrer dans la méthode principale de test, chargez la classe de test, puis exécutez un nouveau USter.inner (); Remarque ici: Parce qu'inner est statique, il n'est pas nécessaire de charger des classes externes et de instancier des classes externes ici. L'intérieur peut être chargé et instancié directement. Les résultats de l'opération sont les suivants:
Constructeur intérieur du bloc statique intérieur
DA QIAO Remarque: Une autre application très importante de la statique consiste à implémenter le modèle de conception singleton. La caractéristique du modèle d'intérêt unique est que la classe ne peut avoir qu'une seule instance. Afin de réaliser cette fonction, le constructeur de classe doit être caché, c'est-à-dire que le constructeur est déclaré privé et fournit une méthode pour créer un objet. Étant donné que le constructeur est déclaré privé, le monde extérieur ne peut pas créer directement un objet de ce type et ne peut obtenir l'objet de classe que par les méthodes fournies par la classe. Par conséquent, la méthode de création d'un objet ne peut être déclarée que statique. L'exemple de programme est le suivant:
classe Singledemo {private static singledemo ins = null; privé singledemo () {} public static singledemo getIns () {if (ins == null) {ins = new SingleDemo (); } return ins; }}