Maison  >  Article  >  Java  >  [Java Basics] Une brève introduction aux classes internes et à leurs caractéristiques

[Java Basics] Une brève introduction aux classes internes et à leurs caractéristiques

php是最好的语言
php是最好的语言original
2018-08-01 13:47:472240parcourir

À propos des classes internes

Les classes internes sont un type de classe imbriquée, et la classe imbriquée a quatre types : [ Source]

  1. classe imbriquée statique La classe imbriquée statique, proche des classes ordinaires, n'a aucune référence à la classe externe, elle ne peut accéder qu'au ** statique de la classe externe, et peut définir méthode non statique, si la classe interne a static**, la classe doit être statique

  2. classe interne classe interne (non statique), vraie classe interne

  3. classe locale classe locale (définie à l'intérieur de la méthode), véritable classe interne

  4. classe anonyme classe anonyme, véritable classe interne, plus adaptée à une utilisation unique et la méthode implémentée n'est pas Plusieurs classes ;

[Java Basics] Une brève introduction aux classes internes et à leurs caractéristiques

La vraie classe interne peut accéder directement aux variables d'instance et aux méthodes de la classe encapsulée externe [Source]

Caractéristiques : [Source]

1. Une classe interne et sa classe externe peuvent accéder mutuellement aux propriétés et méthodes (même si elles sont privées) (JAVA8)

1) Avant 8, classes internes anonymes utilisées Le cycle de vie des variables locales est incohérent avec le cycle de vie des objets de classe internes

2) La portée des variables membres des classes internes reste dans la méthode. les variables locales disparaissent, mais la portée des variables membres qui y font référence disparaît. Elle peut exister en interne, mais lorsque la classe interne sera à nouveau appelée, elle accédera à une variable inexistante !

3), donc final doit être utilisé avant jdk8. Après décompilation, on peut voir que la classe interne va en fait générer une classe avec un constructeur , et les variables référencées sont passées en paramètres, y compris l'instance de classe externe (c'est pourquoi la classe interne contiendra la classe externe par défaut, les références d'objet peuvent facilement provoquer des fuites de mémoire), puis attribuer la valeur à sa propre variable, c'est-à-dire que si la valeur de la variable externe est modifiée dans la classe interne, ne modifie en fait que la valeur. la valeur de la variable propre à la classe interne . Ce n'est pas la valeur d'une variable externe, tout comme une variable passée par une méthode, changer sa valeur dans la méthode entraînera une modification de la variable externe. . Alors pour éviter que cette incohérence ne se produise, il faut qu’elle soit définitive. [Source]

4), et Java8 introduit le concept de final efficace Lorsqu'une classe interne accède à une variable de classe externe, tant que la classe interne ne réaffecte pas la variable externe, alors la variable de classe externe est. une variable finale de facto, Java déclarera implicitement les variables externes comme finales. [Source]

5) Pourquoi est-ce définitif ? Les raisons sont brièvement expliquées ci-dessus Par souci de longueur, toussez~ et par souci de raffinement, précisons encore : lorsque la variable est définitive, par ". copier" la variable locale finale En tant que membre de données d'une classe interne locale, lorsqu'une classe interne locale accède à une variable locale, ce qui est réellement accessible est une "copie" de la variable locale. Lorsque la vraie variable locale dans la pile d'exécution meurt , l'objet de classe interne peut toujours accéder à la variable locale ( (Il semble que la durée de vie des variables locales ait été prolongée). Jusqu'à présent, cela n'a pas grand chose à voir avec final. O(∩_∩)O haha~ Dans le nom de "final", on reviendra éventuellement à final. La variable est finale : [Source]

1. Type référence : sa valeur de référence reste inchangée (pointe toujours vers le même objet), et la copie est la même que la variable de référence d'origine [Source]

2. Type de données de base : Lorsqu'une variable est définitive, car sa valeur ne change pas, sa copie est la même que la quantité d'origine, et l'effet sémantique est le même

[Source]

Classe interne : [Source]

Reflète l'affiliation logique, et d'autres classes peuvent contrôler l'intérieur classe pour être invisible au monde extérieur

La portée des variables membres de la classe externe est l'ensemble de la classe externe (y compris les classes internes), mais la classe externe ne peut pas accéder aux membres privés de la classe interne)

Après compilation, la classe interne est compilée dans une classe séparée, la forme de outClass$innerClass est

static :

Initialisation statique Conteneur : Bloc statique : Un bloc statique qui existe en dehors d'une méthode de classe et n'est exécuté qu'une seule fois lorsque la classe est chargée. Il est couramment utilisé pour initialiser les attributs de classe statique.

1. Les méthodes statiques ne peuvent pas être remplacées par des méthodes non statiques ; 2. Les constructeurs ne peuvent pas être déclarés statiques

final : caractéristiques de l'état final

1. Ne peut pas être couverts par base ou quilt Les variables remplacées et marquées par des classes sont des constantes

2. Attribuez une valeur au moment de la déclaration Sinon, il n'y a qu'une seule possibilité d'attribuer une valeur et vous ne pouvez attribuer qu'explicitement une valeur. dans la méthode constructeur

Exception :

Dans des circonstances normales, n'utilisez pas d'instructions telles que return ou throw dans le bloc final qui entraînent la fin de la méthode. Sinon, les instructions return et throw in. le bloc try et le bloc catch deviendront invalides. L'instruction return dans le bloc enfin entraînera la perte de l'exception. 【Source】【Source】

Dans try...catch, s'il y a plusieurs catch, l'exception de la classe parent doit être placée sous l'exception de la sous-classe, sinon la compilation échouera. Je n'ai pas la flemme de tester ça. Les collègues de passage peuvent me donner des avis^_^

Pourquoi les classes internes et les exceptions sont-elles souvent écrites ensemble ? chaîne à neuf maillons. Mais ne vous inquiétez pas pour la prochaine étape. Cet article contient déjà trop d'exemples

Articles connexes :

Explication détaillée des exemples de classes internes de base Java

Classe interne de base Java Explication détaillée de l'exemple de code

Vidéos associées :

Classification de classe interne et utilisation directe du membre interne cours - Tutoriel vidéo JAVA pour débutant

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!

Déclaration:
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