Maison > Java > javaDidacticiel > Mot clé statique : accès aux membres statiques et non statiques dans les méthodes

Mot clé statique : accès aux membres statiques et non statiques dans les méthodes

DDD
Libérer: 2024-10-25 00:39:30
original
921 Les gens l'ont consulté

Static Keyword: Accessing Static and Non-Static Members in Methods

Dans cet article, nous nous concentrerons sur comment les méthodes interagissent avec les membres statiques et non statiques et pourquoi les variables locales statiques ne le sont pas. autorisé. Il s'agit d'un sujet d'entretien courant et d'un concept crucial pour les développeurs Java.

Cet article s'appuie sur les concepts abordés dans les articles précédents de cette série. Si vous débutez avec le mot-clé statique, je vous recommande de consulter Bloc statique et Variables statiques pour une meilleure base avant de plonger dans les sujets abordés ici.


Aperçu des méthodes et des membres statiques

  • Les membres statiques (variables ou méthodes) appartiennent à la classe plutôt qu'à une instance de la classe.
  • Les membres non statiques sont liés à un objet spécifique et uniques à chaque instance.

Étant donné que les méthodes statiques fonctionnent au niveau de la classe, elles ne peuvent pas accéder directement aux membres de l'instance.


Programme démontrant l'accès statique et non statique :

package keywords.static_keyword;

public class StaticVariables {

    // Static and non-static variables
    static int idStatic = 1;  // Shared across all instances
    int id;                   // Unique to each instance
    String name;              // Unique to each instance

    // Static block – Runs once when the class is loaded
    static {
        displayStatic();  // Call to static method

        // Cannot access non-static method in static block
        display(); // --> Compilation error
    }

    // Constructor to initialize non-static variables
    public StaticVariables(String name) {
        this.id = ++idStatic;  // Increment static ID for every new instance
        this.name = name;
    }

    // Non-static method: Can access both static and non-static members
    void display() {
        System.out.println("Instance Method:");
        System.out.println("Static ID: " + idStatic + ", Instance ID: " +
        id + ", Name: " + name);
    }

    // Static method: Can only access static members directly
    static void displayStatic() {
        System.out.println("Static Method:");
        System.out.println("Static ID: " + idStatic);

        // Static local variables are not allowed
        static int localVar = 10; // --> Compilation error
    }

    public static void main(String[] args) {
        // Call static method directly
        displayStatic();

        // Create instances to access non-static methods
        StaticVariables obj1 = new StaticVariables("Object1");
        StaticVariables obj2 = new StaticVariables("Object2");

        // Access non-static methods through objects
        obj1.display();
        obj2.display();
    }
}
Copier après la connexion
Copier après la connexion

Concepts clés et règles d'accès

1. Pourquoi les variables locales statiques ne sont-elles pas autorisées en Java ?

Java n'autorise pas les variables locales statiques à l'intérieur des méthodes ou des blocs.

  • Raison :
    • Les variables locales appartiennent au stack frame de la méthode et sont créées lorsque la méthode est invoquée.
    • Les variables statiques, cependant, sont des membres au niveau de la classe et doivent être accessibles tout au long du cycle de vie de la classe.
    • Autoriser une variable statique au sein d'une méthode provoquerait une contradiction car les variables locales de la méthode ont une courte durée de vie liée à l'exécution de la méthode.
package keywords.static_keyword;

public class StaticVariables {

    // Static and non-static variables
    static int idStatic = 1;  // Shared across all instances
    int id;                   // Unique to each instance
    String name;              // Unique to each instance

    // Static block – Runs once when the class is loaded
    static {
        displayStatic();  // Call to static method

        // Cannot access non-static method in static block
        display(); // --> Compilation error
    }

    // Constructor to initialize non-static variables
    public StaticVariables(String name) {
        this.id = ++idStatic;  // Increment static ID for every new instance
        this.name = name;
    }

    // Non-static method: Can access both static and non-static members
    void display() {
        System.out.println("Instance Method:");
        System.out.println("Static ID: " + idStatic + ", Instance ID: " +
        id + ", Name: " + name);
    }

    // Static method: Can only access static members directly
    static void displayStatic() {
        System.out.println("Static Method:");
        System.out.println("Static ID: " + idStatic);

        // Static local variables are not allowed
        static int localVar = 10; // --> Compilation error
    }

    public static void main(String[] args) {
        // Call static method directly
        displayStatic();

        // Create instances to access non-static methods
        StaticVariables obj1 = new StaticVariables("Object1");
        StaticVariables obj2 = new StaticVariables("Object2");

        // Access non-static methods through objects
        obj1.display();
        obj2.display();
    }
}
Copier après la connexion
Copier après la connexion

2. Méthodes statiques

  • Peut accéder directement aux variables statiques et à d'autres méthodes statiques.
  • Impossible d'accéder aux membres non statiques directement (puisqu'aucun objet n'existe dans un contexte statique).

3. Méthodes non statiques

  • Peut accéder aux membres statiques et non statiques.
  • Cette flexibilité existe parce que les méthodes non statiques appartiennent à une instance d'objet, leur donnant accès aux données au niveau de la classe et au niveau de l'instance.

4. Bloc statique

  • S'exécute une fois lorsque la classe est chargée par la JVM.
  • Peut appeler des méthodes statiques mais ne peut pas appeler directement des méthodes non statiques, car aucun objet n'est disponible à ce stade.

Résultat du programme

static void displayStatic() {
    static int localVar = 10; // --> Compilation error
}
Copier après la connexion

Résumé des règles

Context Access Static Members Access Non-Static Members Allow Static Local Variables?
Static Method Yes No No
Non-Static Method Yes Yes No
Static Block Yes No No
Contexte Accéder aux membres statiques Accéder aux membres non statiques Autoriser les variables locales statiques ?
ête> Méthode statique Oui Non Non Méthode non statique Oui Oui Non Bloc statique Oui Non Non

Quand utiliser les méthodes statiques ?

  • Fonctions utilitaires ou d'assistance : Par exemple, Math.pow().
  • Quand aucune donnée d'instance n'est requise :Opérations indépendantes de l'état de l'objet.

Conclusion

Les méthodes et membres statiques sont des outils essentiels en Java. Voici les principaux points à retenir :

  • Les Méthodes statiques fonctionnent au niveau de la classe et ne peuvent accéder directement qu'aux membres statiques.
  • Les Méthodes non statiques ont accès aux membres statiques et non statiques.
  • Les variables locales statiques ne sont pas autorisées en Java en raison du conflit entre la portée de la méthode et la durée de vie statique.

En comprenant ces règles, vous serez en mesure d'utiliser efficacement les méthodes statiques dans vos programmes.


Articles connexes

  • Principes fondamentaux de Java

  • Les essentiels de l'entretien avec Array

  • L'essentiel de la mémoire Java

  • L'essentiel du cadre de collections

Bon codage !

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal