926 votes

Classes statiques en Java

Y at-il quelque chose comme Static Class en java? Quelle est la signification d'une telle classe. Est-ce que toutes les méthodes de la classe statique doivent aussi être static ? Est-ce que l'inverse est nécessaire, si une classe contient toutes les méthodes statiques, la classe sera-t-elle statique aussi?

À quoi servent les classes statiques?

832voto

Paul Sasik Points 37766

Il existe statique imbriqués les classes en Java, mais je devine que ce n'est pas ce que vous êtes après. Java n'a aucun moyen de faire un top-niveau de la classe statique, mais vous pouvez simuler une classe statique comme ceci:

  • Déclarez votre classe final - Empêche l'extension de la classe depuis l'extension d'une classe statique n'a pas de sens
  • Faire le constructeur private - Empêche l'instanciation par code client comme il n'a pas de sens pour instancier une classe statique
  • Faire de tous les membres et les fonctions de la classe static - Depuis la classe ne peut pas être instancié en aucun cas, les méthodes peuvent être appelées ou des champs d'instance accessible
  • Notez que le compilateur ne vous empêchera pas de déclaration d'une instance (non statique). La question ne s'affiche si vous tentez d'appeler le membre de l'instance

Simple exemple par des suggestions ci-dessus:

public class TestMyStaticClass {
     public static void main(String []args){
        MyStaticClass.setMyStaticMember(5);
        System.out.println("Static value: " + MyStaticClass.getMyStaticMember());
        System.out.println("Value squared: " + MyStaticClass.squareMyStaticMember());
        // MyStaticClass x = new MyStaticClass(); // results in compile time error
     }
}

// A top-level Java class mimicking static class behavior
public final class MyStaticClass {
    private MyStaticClass () { // private constructor
        myStaticMember = 1;
    }
    private static int myStaticMember;
    public static void setMyStaticMember(int val) {
        myStaticMember = val;
    }
    public static int getMyStaticMember() {
        return myStaticMember;
    }
    public static int squareMyStaticMember() {
        return myStaticMember * myStaticMember;
    }
}

À quoi bon les classes statiques? Une bonne utilisation d'une classe statique est dans la définition, utilité et/ou de la bibliothèque de classes où l'instanciation n'aurait aucun sens. Un excellent exemple est la classe Math qui contient des constantes mathématiques telles que PI et E et fournit simplement des calculs mathématiques. Nécessitant l'instanciation dans un tel cas, serait inutile et source de confusion. Voir Java de la classe de Mathématiques. Remarquez que c'est final et tous ses membres sont statiques. Si Java permis à des classes de niveau supérieur afin d'être déclarée statique puis la classe de Mathématiques serait en effet statique.

310voto

Jon Skeet Points 692016

Bien, Java a des "classes imbriquées statiques", mais elles ne sont pas du tout les mêmes que les classes statiques de C #, si c'est de là que vous venez. Une classe imbriquée statique est juste une qui n'a pas implicitement une référence à une instance de la classe externe.

Les classes imbriquées statiques peuvent avoir des méthodes d'instance et des méthodes statiques.

Il n'y a pas de classe statique de haut niveau en Java.

151voto

amit Points 74385

Il existe une statique classe interne, cette classe [statique interne] n’ont pas besoin une instance de la classe englobante afin d’être intstantiated lui-même.

Ces classes [statique interne] peuvent accéder uniquement les membres statiques de la classe englobante [car il n’est pas référencé à une instance de la classe englobante...]

exemple de code :

100voto

Bitmap Points 4122

Oui, il y a une statique de la classe imbriquée dans java. Lorsque vous déclarez une classe imbriquée statique, il devient automatiquement un stand alone de classe qui peut être instancié sans avoir à l'extérieur de la classe appartient.

Exemple:

public class A
{

 public static class B
 {
 }
}

Parce qu' class B est déclarée statique vous pouvez instancier explicitement que:

B b = new B();

Remarque: si class B n'était pas déclarée statique pour le rendre autonome, une instance d'appel de l'objet serait l'ai regardé comme ça:

A a= new A();
B b = a.new B();

77voto

Shubham Das Points 529

Peut une classe statique en Java ? La réponse est OUI, nous pouvons avoir la classe statique en java. En java, nous avons statique des variables d'instance ainsi que des méthodes statiques et aussi statique bloc. Les Classes peuvent également être effectués statique en Java.

Java nous permet de définir une classe dans une autre. Une telle classe est appelée classe imbriquée. La classe qui clôturait une classe imbriquée est connu comme l'Extérieur de la classe. En java, on ne peut pas faire de classe de Haut niveau statique. Seulement les classes imbriquées peuvent être statiques.

Quelles sont les différences entre statiques et non statiques de classes imbriquées? Suivantes sont les différences majeures entre le statique de la classe imbriquée et non statique de la classe imbriquée. Non statique de la classe imbriquée est aussi appelée Intérieur de la Classe.

1) Imbriquée statique de la classe n'a pas besoin de référence de l'Extérieur de la classe, mais Non statique de la classe imbriquée ou à l'Intérieur de la classe nécessite l'Extérieur de la classe de référence.

2) à l'Intérieur de la classe(ou de la non-statique de la classe imbriquée) peut accéder à la fois statiques et non statiques des membres de l'Extérieur de la classe. Une classe statique ne peut pas accéder aux non-membres statiques de l'Extérieur de la classe. Il peut accéder uniquement aux membres statiques de l'Extérieur de la classe.

3) Une instance de l'Intérieur de la classe ne peut pas être créé sans une instance de l'extérieur de la classe et un Intérieur de classe peut faire référence à des données et des méthodes définies à l'Extérieur de la classe dans laquelle il se niche, de sorte que nous n'avons pas besoin de passer la référence d'un objet dans le constructeur de l'Intérieur de la classe. Pour cette raison, les classes internes peuvent faire programme simple et concise.

/* Java program to demonstrate how to implement static and non-static
   classes in a java program. */
class OuterClass{
   private static String msg = "GeeksForGeeks";

   // Static nested class
   public static class NestedStaticClass{

       // Only static members of Outer class is directly accessible in nested 
       // static class 
       public void printMessage() {

         // Try making 'message' a non-static variable, there will be 
         // compiler error  
         System.out.println("Message from nested static class: " + msg); 
       }
    }

    // non-static nested class - also called Inner class
    public class InnerClass{

       // Both static and non-static members of Outer class are accessible in 
       // this Inner class
       public void display(){
          System.out.println("Message from non-static nested class: "+ msg);
       }
    }
} 

class Main
{
    // How to create instance of static and non static nested class?
    public static void main(String args[]){

       // create instance of nested Static class
       OuterClass.NestedStaticClass printer = new OuterClass.NestedStaticClass();

       // call non static method of nested static class
       printer.printMessage();   

       // In order to create instance of Inner class we need an Outer class 
       // instance. Let us create Outer class instance for creating 
       // non-static nested class
       OuterClass outer = new OuterClass();        
       OuterClass.InnerClass inner  = outer.new InnerClass();

       // calling non-static method of Inner class
       inner.display();

       // we can also combine above steps in one step to create instance of 
       // Inner class
       OuterClass.InnerClass innerObject = new OuterClass().new InnerClass();

       // similarly we can now call Inner class method
       innerObject.display();
    }
}

Sortie: Message de imbriquée statique de la classe: GeeksForGeeks Message de non-statique de la classe imbriquée: GeeksForGeeks Message de non-statique de la classe imbriquée: GeeksForGeeks Livre De Référence: Introduction À la Programmation Java par Y. DANIEL LIANG

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X