-
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).
-
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.
-
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).
-
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).
-
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).
-
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.
-
Modificateur transitoire – uniquement 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.
- 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).
- 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).
- 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.
- Abstrait et synchronisé : à quoi ça sert de synchroniser le travail avec une méthode qui ne fait rien ?
GO TO FULL VERSION