1. En Java, il n'y a pas de déclaration GOTO. Étant donné que le grand nombre d'utilisation des instructions GOTO réduira la lisibilité et la maintenabilité du programme, la langue Java annule l'utilisation de Goto. Dans le même temps, afin d'éviter la confusion causée par les programmeurs utilisant GOTO par eux-mêmes, le langage Java définit toujours Goto comme un mot-clé, mais ne définit aucune syntaxe, il est donc appelé "mots réservés".
2 Bien que TRUE, FALSE et NULL soient affichés dans différentes couleurs de l'IDE, ce ne sont pas des mots clés, mais des "constantes littérales", tout comme ABC de type de chaîne.
3 Essayez d'éviter d'utiliser $ lors de la définition d'un nom, car lorsque le compilateur compile le fichier .java, il compile "$" dans un connecteur du type de niveau supérieur et du type de niveau inférieur. Voir l'exemple suivant:
Lors de la compilation (javac test3.java) ce code, le compilateur rapportera l'erreur suivante: test.java:12: erreur: duplication de classe: com.javastack.test.outer.inner classe inner {^
4 Les caractères d'échappement Unicode sont traités très tôt, avant d'analyser le programme. Par exemple:
Ces deux lignes d'erreurs de compilation de code se produisent dans le programme. Ces deux codes Unicode représentent respectivement "la ligne de ligne" et le "retour du chariot", donc lorsque le compilateur compile, le code ressemble à ceci:
5 Le code Unicode est codé à l'aide d'un caractère 16 bits et est représenté par le type de char en java. Unicode s'est maintenant étendu à un million de caractères, et ceux qui dépassent la limite 16 bits deviennent des caractères complémentaires. Tous les caractères complémentaires ne peuvent pas être représentés par des constantes de caractère.
6 Lorsque court, octet, CHAR participe à l'opération, le résultat est le type int, pas le même que le type plus élevé. Si la variable est de type octet, court et octet, lorsqu'il se voit attribuer une constante à partir du temps de compilation, et la constante ne dépasse pas la plage de valeur de la variable, le compilateur peut effectuer une conversion de rétrécissement implicite. Cette conversion de rétractation implicite est sûre car la conversion de rétrécissement ne s'applique qu'à l'affectation des variables, et non aux instructions d'appel de méthode, c'est-à-dire non pas par des paramètres pendant l'appel de la méthode. (Voir le petit problème avec la conversion de type par défaut en Java pour plus de détails)
7 Remarque le type de char, qui est un type non signé. Par conséquent, la conversion entre char et court ou char et octet doit être affichée à l'aide de la conversion de type. La conversion de l'octet en char à la conversion de rétractation prolongée est assez spéciale, c'est-à-dire que la conversion est étendue en octet en int, puis rétréci en char.
8 Dans la conversion étendue entre les données entières, si l'opérande est de type char (type non signé), une expansion non signée est effectuée, le bit d'extension étant 0. Si l'opérande est d'octet, court ou int (type signé), l'extension signée est effectuée, le bit d'expansion étant le bit de signe de la variable.
9 La conversion rétrécie entre les données entières est simplement pour tronquer et éliminer les bits élevés sans effectuer aucun autre traitement.
10 0,1 + 0,2 ne correspond pas à 0.3.System.out.println ((double) 0,1+ (double) 0,2); Le résultat de la sortie de cette instruction est de 0,3000000000000000000000004. Parce que les ordinateurs utilisent le binaire pour stocker les données, et de nombreuses décimales ne peuvent pas être représentées avec précision en binaire (en fait, la plupart des décimales sont approximatives), tout comme l'utilisation de décimales ne peut pas représenter avec précision 1/3. La plupart des types de points flottants ne stockent que leurs valeurs approximativement dans les ordinateurs, plutôt que avec précision en tant qu'entiers. Un autre exemple est une boucle morte: pour (float f = 10.1f; f! = 11; f + = 0,1f) {}
11 Le type de flotteur peut conserver 7 à 8 nombres significatifs, tandis que le type double peut conserver 15 à 16 nombres significatifs. Par conséquent, lorsque la valeur du type int ou du type long est supérieure au nombre valide de double ou de flotteur, certains des bits significatifs les plus bas de la valeur seront perdus, entraînant la perte de précision. À l'heure actuelle, le mode d'arrondi récent IEEEE754 sera utilisé pour extraire la valeur du point flottant la plus proche de la valeur entière. Bien que la conversion de l'entier en type de point flottant soit une conversion étendue, lorsque la valeur est grande ou petite (la valeur absolue est grande), une certaine perte de précision se produira.
12 Comment calculer i ++ j? (Cette question n'est pas très significative à discuter en C / C ++), car C / C ++ dépend de l'implémentation de la structure matérielle, et les résultats seront différents dans différents environnements. Cependant, en Java, ce résultat est fixé et non affecté par l'environnement matériel et la plate-forme sur laquelle il fonctionne). Réponse: Selon les règles de la cupidité, le front + + + est meilleur que le dos + +, et le résultat est (i ++) + J
13 I ++ et ++ Je suis en fait +1 d'abord puis attribué. ++ I, il n'y a rien à dire; i ++, en prenant j = i ++; À titre d'exemple, l'implémentation au niveau sous-jacent est: temp = i; i = i + 1; J = temp; Donc, i = 15; i = i ++; Le résultat de cette expression est de 15. (Parce qu'après en ajouter un, une autre affectation est effectuée, passant de 16 à 15)
14 +0 et -0 Dans le stockage variable de type à virgule flottante, les bits de signe sont différents. Lorsque -0 et +0 participent aux opérations connexes des types de points flottants (tels que les opérations de division et de vestige), différents résultats peuvent être produits.
15 La division de phase et le calcul de l'équilibre du point flottant sont différents de la division de phase et du calcul de l'équilibre des entiers. Lorsque le diviseur est 0, l'opération de point flottante ne générera pas une exception ArithMeticexception.
16 La classe String est une classe non mutable, et une fois ses objets créés, ils ne peuvent pas être détruits. Les méthodes qui semblent modifier la séquence de caractères dans la classe String renvoient en fait l'objet String nouvellement créé au lieu de modifier son propre objet.
17 Étant donné que les objets de chaîne sont immuables, ils sont en filetage et peuvent être implémentés librement pour le partage.
18 À l'intérieur de la classe String, un tableau de caractères (char []) est utilisé pour maintenir la séquence de caractères. La longueur maximale d'une chaîne est la longueur maximale du tableau de caractères. En théorie, la longueur maximale est la valeur maximale du type int, c'est-à-dire 2147483647. Dans la pratique, la valeur maximale qui peut être obtenue est généralement inférieure à la valeur maximale théorique.
19 La méthode principale () est fondamentalement la même que les autres méthodes en termes de comportement de performance. Il peut être surchargé, appelé, hérité, caché par d'autres méthodes, ou exceptions lancées avec des paramètres de type. Nous pouvons également appeler la méthode principale (ou toute autre méthode) par la réflexion dans un programme.
20 Lorsque les noms de deux ou plusieurs méthodes sont les mêmes et que la liste des paramètres est différente, ces méthodes constituent une surcharge. La méthode surchargée peut être distinguée en fonction du type correspondant à la liste des paramètres et au nombre de paramètres. Cependant, le nom du paramètre, le type de retour de la méthode, la liste des exceptions et le paramètre de type de la méthode ne peuvent pas être utilisés comme conditions pour distinguer la méthode surchargée.
21 Quelle méthode choisir d'appeler, la commande est la suivante:
22 La différence essentielle entre la réécriture et le cachée est que la réécriture est liée dynamiquement et que les membres de la classe pertinente sont déterminés en fonction du type réel de l'objet indiqué par la référence d'exécution. La cachette est liée statiquement et les membres concernés de l'appel sont déterminés en fonction du type statique référencé au moment de la compilation. En d'autres termes, si la sous-classe remplace la méthode de la classe parent, lorsque la référence de la classe parent pointe vers l'objet de classe enfant, la méthode de sous-classe est appelée via la référence de la classe parent. Si la classe enfant cache la méthode de la classe parent (variable membre), la méthode de la classe parent (variable membre) est toujours appelée via la référence à la classe parent.
23 Le constructeur est appelé récursivement. Le constructeur de la sous-classe appellera le constructeur de la classe parent jusqu'à ce que le constructeur de la classe d'objets soit appelé.
24 Le constructeur ne crée pas d'objet. Le constructeur est appelé par le système lors de la création d'un objet utilisant un nouveau et est utilisé pour initialiser les membres d'instance de la classe. Dans l'ordre, l'objet est créé d'abord, puis le constructeur est appelé. (Le constructeur ne génère pas de nouveaux objets)
25 Le constructeur par défaut n'est pas vide. Ce constructeur appellera le constructeur sans paramètres de la classe parent et peut effectuer l'initialisation des variables des membres d'instance. Par conséquent, le constructeur par défaut appelle au moins le constructeur de la classe parent, et il peut faire plus de travail, y compris les blocs d'initialisation de déclaration de variable d'instance et d'initialisation d'instance, tous deux exécutés dans le constructeur.
26 Lorsque les types de deux opérandes de l'opérateur == ou! = Sont l'un des types de données de base et que les autres sont les types de référence de classe en wrapper, déballant le type de référence dans le type de données de base, puis en comparant si les valeurs des deux types de données de base sont égales.
27 En Java, les tableaux sont également des classes et les variables de référence déclarées par les tableaux pointent des objets de type de tableau. Tous les tableaux héritent de la classe d'objets et implémentez les interfaces java.lang.clonable et java.io.serializable. Les membres d'un tableau comprennent la longueur variable (existe implicitement) et les membres hérités de la classe d'objets. Cloneable et sérialisable sont deux interfaces marquées, et aucun membre n'est explicitement déclaré dans ces interfaces.
28 L'interface est une conception complètement abstraite et ne peut pas être instanciée. Le type d'excuse créé par une nouvelle manière est de créer une classe anonyme qui implémente le type d'interface.
29 Si deux interfaces déclarent la même variable x, une erreur de compilation se produira lorsqu'une interface hérite des deux interfaces en même temps, ou une certaine classe implémente les deux interfaces en même temps.
30 Si la méthode m du même nom est déclarée dans les deux interfaces et que les deux méthodes ne constituent pas une surcharge, lorsqu'une interface peut hériter des deux interfaces en même temps, ou qu'une certaine classe peut hériter des deux interfaces en même temps, il doit y avoir une signature de méthode afin que la signature soit une sous-signature de la méthode à deux m de la même manière, et dans le même temps, et dans le type de type de la méthode. Type du type de retour de la méthode des deux m.