Les mots réservés Java vont de ceux que vous voyez souvent à ceux que vous ne voyez pas très souvent. Je présenterai brièvement les rares mots réservés que j'ai choisis en fonction de mon propre jugement et de mes préjugés.
Je n'entrerai pas trop dans les détails sur chacun d'eux pour que cela ne devienne pas trop long.
Selon les spécifications du langage Java, les «mots réservés» sont appelés «mots-clés». Je pense que les «mots réservés» sont plus courants, je vais donc utiliser le terme «mots réservés» dans cet article.
Débutant Java Il peut être connu de ceux qui connaissent Java dans une certaine mesure (ligne de prévention)
Java11
Jetons d'abord un œil à la liste des mots réservés. Selon la spécification de langue officielle, à partir de Java 11, il y a 51 mots réservés comme suit. https://docs.oracle.com/javase/specs/jls/se11/html/jls-3.html#jls-3.9
abstract continue for new switch
assert default if package synchronized
boolean do goto private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while
_ (underscore)
Je vais en prendre quelques-uns et les présenter.
assert Un mot réservé pour utiliser l'assertion en Java. Une expression décrit les prérequis à remplir lors de l'exécution d'un programme, et sans crainte de malentendu, cela semble être un mécanisme pour vérifier si la valeur d'une variable est une valeur inattendue, etc. C'est une chose.
Écrivez une expression conditionnelle après assert, et si la valeur d'évaluation de l'expression conditionnelle est false, une AssertionError sera levée. Par exemple, il peut être utilisé pour vérifier si la valeur de l'argument de la méthode est la valeur attendue.
//division
private int divide(int x, int y) {
assert y != 0; //Y ne doit pas être 0 car il s'agit d'une division
return x / y;
}
De plus, les assertions ne prendront effet que si vous spécifiez -enableassertions (ou -ea) au moment de l'exécution. Vous pouvez l'activer ou le désactiver en passant l'option ci-dessus. Il peut être activé pendant le développement et désactivé pendant la production.
const En langage C, etc., c'est un mot réservé pour déclarer une constante, mais en Java c'est un mot réservé qui n'a pas de sens. Cela ne veut rien dire, mais il existe en tant que mot réservé pour une raison quelconque. L'utilisation de const n'a aucune signification syntaxique et entraînera une erreur de compilation.
Notez que vous devez utiliser final au lieu de const pour déclarer une constante en Java.
//Comme il s'agit d'un mot réservé, la coloration syntaxique est effectuée
const int num = 1;
//Erreur:
//Début d'expression illégal
// const int num = 1;
// ^
default C'est un mot réservé rare qui a de multiples usages. Il a été ajouté au fur et à mesure que la version montait.
Exemple d'instruction Switch
switch(i) {
case 1:
System.out.println("un");
break;
case 2:
System.out.println("deux");
break;
default:
System.out.println("Autre");
}
Exemple d'annotation
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Range {
int min() default Integer.MIN_VALUE;
int max() default Integer.MAX_VALUE;
}
Exemple de méthode d'interface par défaut
public interface Person {
default String name() {
return "unknown";
}
}
goto En langage C, etc., c'est un mot réservé utilisé pour sauter le contrôle à n'importe quel endroit, mais comme const, c'est un mot réservé qui existe même s'il n'a aucune signification en Java. Java n'a pas de fonction équivalente à goto. L'abus de goto peut réduire considérablement la lisibilité du code source, il n'y a donc souvent pas de fonctionnalité équivalente dans des langages relativement modernes.
Comme avec const, il s'agit bien sûr d'une erreur de compilation lorsqu'il est utilisé.
//Une fois que toute la mise en évidence de la syntaxe est terminée
goto label;
//Erreur:
//Début d'expression illégal
// goto label;
// ^
native Un mot réservé qui indique que le contenu de la méthode est implémenté dans une langue native telle que C. Il est exécuté en utilisant JNI etc.
public native boolean createDirectory(File f);
strictfp Il s'agit d'un mot réservé pour empêcher le résultat du calcul en virgule flottante de changer en fonction de l'environnement d'exécution (afin que le résultat soit le même dans tous les environnements d'exécution). Qualifiez les méthodes et les classes. À l'inverse, si vous ne remplissez pas les conditions requises avec strictfp, le résultat du calcul en virgule flottante peut changer en fonction de l'environnement d'exécution.
Personnellement, je ne l'ai jamais vu réellement utilisé.
private strictfp double calc(double x, double y) {
return x * y;
}
transient Les champs qualifiés sont exclus de la sérialisation. La sérialisation est la conversion du contenu d'un objet afin qu'il puisse être enregistré dans un fichier ou envoyé vers une autre machine. En se qualifiant avec transitoire, le champ pertinent est exclu des données sérialisées.
public class Person implements Serializable {
private String firstName;
private String lastName;
private transient String fullName;
}
volatile
Supprime l'optimisation d'hypothèse monothread pour les champs qualifiés.
Je suis sûr que certains d'entre vous l'ont vu, mais je ne sais pas ce que cela signifie.
Je ne suis pas sûr non plus. </ s>
S'il n'est pas qualifié avec volatile, le compilateur peut générer des bytecodes légèrement différents de la source pour l'optimisation, mais volatile supprime cette optimisation. Dans le cas d'un thread unique, il n'y a pas d'effet particulier, mais dans le cas du multithread, une incohérence peut se produire en raison de l'optimisation par le compilateur. Volatile est utilisé pour empêcher l'apparition de telles incohérences.
volatile boolean shutdownRequested;
...
public void shutdown() { shutdownRequested = true; }
public void doWork() {
while (!shutdownRequested) {
// do stuff
}
}
Depuis https://www.ibm.com/developerworks/jp/java/library/j-jtp06197.html
Dans l'exemple ci-dessus, nous nous attendons à ce que shutdown () sorte de la boucle lorsqu'il est appelé par un autre thread, mais il peut ne pas fonctionner comme prévu à moins que shutdownRequested ne soit qualifié avec volatile.
… C'était censé l'être, mais quand je l'ai essayé, ça fonctionnait normalement même sans volatile. S'il vous plaît dites-moi qui le connaît! </ font>
_(underscore) Dans des langages tels que Scala, _ est utilisé pour les espaces réservés, etc., mais Java n'a pas une telle fonctionnalité. Comme const et goto, c'est un mot réservé sans signification (symbole?). _ Est devenu un mot réservé relativement récemment avec Java 9, et peut être en prévision d'améliorations futures.
int _ = 1;
//Erreur:
//À partir de la version 9'_'Est un mot-clé et ne peut pas être utilisé comme identifiant
// int _ = 1;
// ^
widefp À l'opposé de strictfp, le résultat du calcul en virgule flottante devient dépendant de l'environnement. Widefp a été supprimé car il se comporte désormais comme ça par défaut.
C'est un littéral booléen familier. En fait, ce ne sont pas des mots réservés dans la spécification du langage Java. Eh bien, il ne peut pas être utilisé comme identifiant, donc c'est en fait comme un mot réservé.
null C'est un littéral nul familier. Comme le littéral booléen, il ne peut pas être utilisé comme identificateur, mais ce n'est pas un mot réservé dans les spécifications du langage.
open, module, requires, transitive, exports, opens, to, uses, provides, with
Les deux ont été ajoutés dans Java 9 pour la fonctionnalité du module. Si vous prenez chacun d'eux, ce sera long et je ne comprends pas bien </ s>, donc je vais omettre l'explication.
Les deux sont des mots qui ont une signification particulière, mais ils peuvent être utilisés comme noms de variables. Probablement pour la compatibilité.
String module = "module";
var Utilisé pour la fonctionnalité d'inférence de type ajoutée à partir de Java 10. Cela a également une signification spéciale comme les "mots clés restreints" ci-dessus, mais il peut être utilisé comme nom de variable, etc. Ce n'est peut-être pas un mot réservé pour la compatibilité.
var var = 1;
J'ai vu beaucoup de choses, des mots réservés Java à des choses qui ressemblent à des mots réservés mais ne sont pas des mots réservés. Je serais heureux si vous pouviez penser qu'il y avait une telle chose.
https://docs.oracle.com/javase/specs/jls/se11/html/jls-3.html#jls-3.9 https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%89_(Java) https://java.keicode.com/lang/assert.php https://www.wdic.org/w/TECH/strictfp https://www.ibm.com/developerworks/jp/java/library/j-jtp06197.html https://www.wdic.org/w/TECH/%E4%BA%88%E7%B4%84%E8%AA%9E%20%28Java%29
Recommended Posts