Y a-t-il quelque chose comme static class
en java?
Quel est le sens d'une telle classe. Toutes les méthodes de la classe statique doivent-elles l'être static
également?
Est-il obligatoire dans l'autre sens, que si une classe contient toutes les méthodes statiques, la classe doit-elle aussi être statique?
À quoi servent les classes statiques?
java
static-classes
Kraken
la source
la source
Réponses:
Java a des classes imbriquées statiques , mais il semble que vous recherchiez une classe statique de niveau supérieur. Java n'a aucun moyen de rendre statique une classe de niveau supérieur, mais vous pouvez simuler une classe statique comme celle-ci:
final
- Empêche l'extension de la classe car l'extension d'une classe statique n'a aucun sensprivate
- Empêche l'instanciation par le code client car cela n'a aucun sens d'instancier une classe statiquestatic
- Étant donné que la classe ne peut pas être instanciée, aucune méthode d'instance ne peut être appelée ni aucun champ d'instance accessibleExemple simple par suggestions ci-dessus:
À quoi servent les classes statiques? Une bonne utilisation d'une classe statique consiste à définir des classes ponctuelles, utilitaires et / ou de bibliothèque où l'instanciation n'aurait pas de sens. Un bon exemple est la classe Math qui contient des constantes mathématiques telles que PI et E et fournit simplement des calculs mathématiques. Exiger l'instanciation dans un tel cas serait inutile et déroutant. Voir la
Math
classe et le code source . Notez que c'est le casfinal
et que tous ses membres le sontstatic
. Si Java permettait de déclarer des classes de niveau supérieur,static
la classe Math serait en effet statique.la source
Foo
avec seulement desstatic
méthodes n'est pas la même chose questatic class Foo
Eh 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 veniez. Une classe imbriquée statique n'est qu'une classe 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 rien de tel qu'une classe statique de niveau supérieur en Java.
la source
static
pour les déclarer. Ils sont implicitement statiques dans la mesure où vous n'avez besoin d'aucune référence à quoi que ce soit d'autre pour en construire une. Personnellement, je trouve la terminologie statique / non statique un peu étrange pour les classes imbriquées de toute façon ... Je pense qu'il serait plus simple de parler de ce comportement.Il existe une classe imbriquée statique , cette classe [imbriquée statique] n'a pas besoin d'une instance de la classe englobante pour être instanciée elle-même.
Ces classes [celles qui sont imbriquées statiques] ne peuvent accéder qu'aux membres statiques de la classe englobante [car elles n'ont aucune référence aux instances de la classe englobante ...]
exemple de code:
la source
Oui, il existe une classe imbriquée statique en java. Lorsque vous déclarez une classe imbriquée statique, elle devient automatiquement une classe autonome qui peut être instanciée sans avoir à instancier la classe externe à laquelle elle appartient.
Exemple:
Parce que
class B
est déclaré statique, vous pouvez explicitement instancier:Notez que s'il
class B
n'a pas été déclaré statique pour le rendre autonome, un appel d'objet d'instance aurait ressemblé à ceci:la source
B b = new B();
si vous essayez de l'instancier à partir de la classeA
elle-même.Que se passe-t-il lorsqu'un membre à l'intérieur d'un
class
est déclaré commestatic
..? Les membres sont accessibles sans instancier leclass
. Par conséquent, créer une classe externe (classe de niveau supérieur)static
n'a aucun sens. Ce n'est donc pas autorisé.Mais vous pouvez définir des classes internes comme statiques (car c'est un membre de la classe de niveau supérieur). Ensuite, cette classe est accessible sans instancier la classe de niveau supérieur. Prenons l'exemple suivant.
Maintenant, à l'intérieur d'une classe différente
C
, la classeB
est accessible sans créer d'instance de classeA
.static
les classes peuvent aussi avoir desnon-static
membres. Seule la classe devient statique.Mais si le
static
mot-clé est supprimé de la classeB
, il n'est pas accessible directement sans créer une instance deA
.Mais nous ne pouvons pas avoir de
static
membres à l'intérieur d'unenon-static
classe intérieure.la source
static
n'a qu'une seule signification en java. Si quelque chose eststatic
dans une classe, cela signifie que cette chose est accessible sans instancier cette classe. Il ne dit rien concernant la création d'instances ou non ..Étant donné que c'est le meilleur résultat sur Google pour "java de classe statique" et que la meilleure réponse n'est pas ici, j'ai pensé que je l'ajouterais. J'interprète la question d'OP comme concernant les classes statiques en C #, qui sont connues sous le nom de singletons dans le monde Java. Pour ceux qui ne le savent pas, en C # le mot-clé "statique" peut être appliqué à une déclaration de classe ce qui signifie que la classe résultante ne peut jamais être instanciée.
Extrait de "Effective Java - Second Edition" de Joshua Bloch (largement considéré comme l'un des meilleurs guides de style Java disponibles):
Bloch, Joshua (2008-05-08). Java efficace (série Java) (p. 18). Éducation Pearson.
Je pense que la mise en œuvre et la justification sont assez explicites.
la source
Une classe peut-elle être statique en Java?
La réponse est OUI , nous pouvons avoir une classe statique en java. En java, nous avons des variables d'instance statiques ainsi que des méthodes statiques et également un bloc statique . Les classes peuvent également être rendues statiques en Java.
En java, nous ne pouvons pas rendre la classe de niveau supérieur (externe) statique. Seules les classes imbriquées peuvent être statiques.
classe imbriquée statique vs classe imbriquée non statique
1) La classe statique imbriquée n'a pas besoin d'une référence de classe externe, mais la classe imbriquée non statique ou la classe interne nécessite une référence de classe externe.
2) La classe interne (ou classe imbriquée non statique) peut accéder aux membres statiques et non statiques de la classe externe. Une classe statique ne peut pas accéder aux membres non statiques de la classe Outer. Il ne peut accéder qu'aux membres statiques de la classe Outer.
voir ici: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
la source
Les classes externes ne peuvent pas être statiques, mais les classes imbriquées / internes peuvent l'être. Cela vous aide essentiellement à utiliser la classe imbriquée / interne sans créer d'instance de la classe externe.
la source
En termes simples, Java prend en charge la déclaration d'une classe comme étant statique uniquement pour les classes internes mais pas pour les classes de niveau supérieur.
classes de niveau supérieur: un projet java peut contenir plusieurs classes de niveau supérieur dans chaque fichier source java, l'une des classes étant nommée d'après le nom du fichier. Il n'y a que trois options ou mots-clés autorisés devant les classes de niveau supérieur, public, abstrait et final .
Classes internes : les classes qui se trouvent à l'intérieur d'une classe de niveau supérieur sont appelées classes internes, ce qui est essentiellement le concept de classes imbriquées. Les classes internes peuvent être statiques . L'idée de rendre les classes internes statiques, est de profiter de l'instanciation des objets des classes internes sans instancier l'objet de la classe de niveau supérieur. C'est exactement de la même manière que les méthodes et variables statiques fonctionnent à l'intérieur d'une classe de niveau supérieur.
Par conséquent, Java prend en charge les classes statiques au niveau de la classe interne (dans les classes imbriquées)
Et Java ne prend pas en charge les classes statiques aux classes de niveau supérieur.
J'espère que cela donne une solution plus simple à la question de la compréhension de base des classes statiques en Java.
la source
Java a des méthodes statiques qui sont associées aux classes (par exemple java.lang.Math n'a que des méthodes statiques), mais la classe elle-même n'est pas statique.
la source
Vous ne pouvez pas utiliser le mot clé statique avec une classe sauf s'il s'agit d'une classe interne. Une classe interne statique est une classe imbriquée qui est un membre statique de la classe externe. Il est accessible sans instancier la classe externe, en utilisant d'autres membres statiques. Tout comme les membres statiques, une classe imbriquée statique n'a pas accès aux variables d'instance et aux méthodes de la classe externe.
la source
static
mot - clé avec une classe sauf s'il s'agit d'une classe imbriquée . «Intérieur statique» est une contradiction dans les termes .Une méthode statique signifie qu'elle est accessible sans créer d'objet de la classe, contrairement à public:
la source
Toutes les bonnes réponses, mais je n'ai pas vu de référence à java.util.Collections qui utilise des tonnes de classe interne statique pour leurs méthodes de facteur statique. Donc, en ajoutant la même chose.
Ajout d'un exemple de java.util.Collections qui a plusieurs classes internes statiques. Les classes internes sont utiles pour regrouper le code qui doit être accessible via la classe externe.
Voici la méthode du facteur statique dans la classe java.util.Collections
la source