JavaRush /Blog Java /Random-FR /Modificateurs ou comment lancer des enchantements dans le...
Petr Gorskin
Niveau 22
Москва

Modificateurs ou comment lancer des enchantements dans le monde Java

Publié dans le groupe Random-FR
Bonne journée galactique, camarades ! Il s'agit de mon premier manuscrit interplanétaire, et comme je suis ingénieur, l'interprétation de certains concepts peut se faire dans un langage extraterrestre.
Modificateurs ou comment lancer des enchantements dans le monde de Java - 1
Introduction À mon avis, Java est comme un couloir sans fin avec des portes (paquet). Derrière chacune de ces portes se trouvent un espace libre et un classeur dans lequel est stockée une montagne de parchemins magiques avec des instructions (classes) pour créer des objets. Chaque parchemin décrit un ensemble de caractéristiques (variables) et de capacités (méthodes) - actions (champs) effectuées soit sur la classe elle-même, soit sur un objet assemblé sur sa base. A ce stade, imaginons-nous comme des sorciers et essayons de créer une toute nouvelle instruction (classe). Alors : Modificateurs ou comment lancer des enchantements dans le monde Java - 2buvons l'élixir de sagesse (apprenons les bases) et commençons à rédiger des instructions. Modificateurs d'accès et de non-accès Imaginons que toute instruction et un objet créé sur cette base, ainsi que ses caractéristiques et capacités, seront dans un premier temps enchantés par magie, c'est-à-dire ils se verront attribuer des ensembles spécifiques de modificateurs. Essayons de créer un guide sur les enchantements possibles.
  1. Le modificateur d'accès , qui décrit l'accessibilité d'une classe, d'un objet ou d'un champ, est obligatoire : en son absence, la JVM (c'est par exemple une source de magie universelle) attribue automatiquement un identifiant par défaut au package.

    À partir du deuxième modificateur, il existe des modificateurs de non-accès, qui ne sont pas obligatoires et peuvent également entrer en conflit les uns avec les autres (mais commençons par le commencement).

  2. Le modificateur Statique indique que la classe, l'objet ou le champ est statique. Mais qu'est-ce que ça veut dire? En gros, nous allons l'essayer sur les champs.

    Les variables statiques sont appelées variables de classe et sont uniques à toutes les instances de cette classe. Les méthodes statiques peuvent être appelées sans créer l'objet dans lequel elles sont déclarées. Les classes statiques sont utilisées lors de l'imbrication d'une classe dans une autre et le principe d'interaction entre la classe interne et la classe externe est similaire aux méthodes (c'est un sujet pour une discussion distincte). Peut également être utilisé comme bloc séparé dans un objet.

  3. Le modificateur Final indique effectivement à une variable qu'il s'agit d'une constante. Pour les méthodes - elles ne peuvent pas être remplacées lors de l'héritage, mais pour les classes, cela indique qu'elles ne peuvent pas en être héritées (immuables).

    Les modificateurs static et final s'appliquent aux classes, objets et champs. Cependant, il existe des modificateurs qui ne s'appliquent qu'à certains d'entre eux (ou même à une partie d'entre eux, puisqu'une variable et une méthode sont toutes deux un champ, mais que tous les modificateurs ne s'appliquent pas aux deux). Si nous faisons une analogie, seuls les bottes et les gants peuvent être enchantés pour la vitesse (pour les faire bouger plus vite), mais enchanter un chapeau pour la vitesse est inutile (et le Conseil de Surveillance Universel (compilateur) ne le permettra pas).

  4. Le modificateur Abstract s'applique uniquement aux méthodes et aux classes . Une méthode abstraite est une méthode sans implémentation (corps).

    Si une classe est marquée comme abstraite, soit elle contient des méthodes abstraites, soit elle est conçue pour empêcher la création d'instances de cette classe. Si l'on fait une analogie, au milieu des instructions vous pouvez voir la rubrique « Colorier un objet », après quoi il n'y a pas de description. Ceux. en utilisant cette instruction, vous pouvez créer un objet et vous pouvez également le colorer, mais cette instruction particulière ne dit pas comment (écrivez vos propres instructions pour créer un objet rouge basé sur cet objet et décrivez comment le colorer).

Lorsque vous travaillez dans un environnement multithread, des modificateurs spéciaux peuvent être utilisés :
  1. Le modificateur Syncronized est utilisé uniquement pour les méthodes. Sa présence indique qu'un seul thread peut l'exécuter à la fois. Peut également être utilisé comme bloc de code distinct dans un objet (spécifiant l'objet de synchronisation).

  2. Modificateur volatile - uniquement pour les variables . Il est recommandé de l'utiliser pour les variables pouvant être utilisées simultanément par plusieurs threads. Une variable avec un tel modificateur est instantanément copiée du cache du processeur vers la mémoire principale à chaque fois qu'elle change, permettant aux threads parallèles de recevoir la valeur la plus récente.

    Il convient de noter que volatile est applicable dans les cas où un seul thread peut écrire dans une variable et les autres ne peuvent que la lire. Pour les autres cas, il est préférable d'ajouter le modificateur synchronisé aux méthodes qui écrivent dans une variable volatile.

  3. Modificateur transitoireuniquement pour les variables . Ce modificateur marque les variables qui doivent être ignorées lors de la sérialisation d'un objet (c'est un processus tellement intelligent qu'en principe, vous pouvez le lire vous-même...)*

    * - J'ai écrit cet article au niveau 17 et jusque-là la sérialisation en tant que processus n'avait pas été décrite, donc au lieu de copier-coller, je vous conseille de l'étudier vous-même si nécessaire.

Paires de modificateurs en conflit Outre l'applicabilité des modificateurs à diverses classes, objets et champs, il existe également le concept de paires en conflit. Disons qu'enchanter un casque avec de la force le rend lourd, et en même temps vous voulez l'enchanter pour qu'il soit léger. L’un ne va pas avec l’autre.
  1. Final et Volatile - lorsqu'il s'agit de variables, on ne peut pas dire simultanément qu'elles sont définitives (constantes) et que plusieurs threads ont la capacité de les modifier... Après tout, elles sont constantes, et à tout moment un thread peut les lire , mais pas un seul fil ne peut changer la constante (le Conseil de Surveillance Universel ne le permettra pas).
  2. Final et abstrait - les classes et les méthodes ne peuvent pas être à la fois abstraites (ce qui implique dans la plupart des cas la nécessité de les clarifier pour la mise en œuvre) et finales, c'est-à-dire immuable. Il s'avère que les instructions indiquent comment créer un bon casque durable à partir de n'importe quel matériau (partie abstraite), mais pour cela, il ne doit y avoir aucun trou (la dernière partie obligatoire ne peut pas être modifiée).
  3. Abstraite et statique - Une méthode abstraite ne peut pas être à la fois statique ou synchronisée. Une méthode abstraite statique n'a aucun sens, car non seulement elle ne fait rien, mais elle appartient également à une classe entière - le résultat est inutile.
  4. Abstrait et synchronisé : à quoi ça sert de synchroniser le travail avec une méthode qui ne fait rien ?
En résumé Ainsi, la description des modificateurs est terminée, tous les conflits ont été réglés et vous pouvez désormais consolider le résultat avec un aide-mémoire - un diagramme d'enchantement : Modificateurs ou comment lancer des enchantements dans le monde de Java - 3En conclusion, je tiens à dire qu'écrire cet article a été la réalisation de mon désir pour étudier les modificateurs. C’est à vous de juger si l’expérience est réussie ou non. J'attends vos suggestions pour l'améliorer/corriger et, peut-être qu'ensemble, nous en ferons un manuel très utile pour les joueurs Java débutants.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION