Maison >Java >JavaQuestions d'entretien >Questions d'entretien de base Java haute fréquence——(2)

Questions d'entretien de base Java haute fréquence——(2)

王林
王林avant
2020-08-29 16:18:262365parcourir

Questions d'entretien de base Java haute fréquence——(2)

Les questions d'entretien sont les suivantes :

(questions d'entretien connexes recommandées : questions et réponses d'entretien Java)

1. String s = new String("xyz"); Combien de StringObjects sont créés ? Est-il possible d'hériter de la classe String ?

Les deux ou un est possible. "xyz" correspond à un objet. Cet objet est placé dans le tampon de constante de chaîne. xyz" apparaît, ce sera celui du buffer. Chaque fois que NewString est écrit, un nouvel objet est créé, qui utilise le contenu de l'objet constant "xyz" pour créer un nouvel objet String.

Si 'xyz' a été utilisé auparavant, alors "xyz" ne sera pas créé ici, et il sera extrait directement du tampon, et un StringObject sera créé mais si "xyz" n'a pas été créé ; utilisé auparavant, puis à ce stade, un objet est créé et placé dans le tampon, dans ce cas, il crée deux objets. Quant à savoir si la classe String est héritée, la réponse est non, car String est modifié de manière finale par défaut et n'est pas héritable.

2. La différence entre String et StringBuffer

La plateforme JAVA propose deux classes : String et StringBuffer, qui peuvent stocker et exploiter des chaînes, c'est-à-dire contenir plusieurs caractères. données de caractères. La classe String fournit des chaînes numériquement immuables. La chaîne fournie par cette classe StringBuffer peut être modifiée. Vous pouvez utiliser StringBuffer lorsque vous savez que les données de caractères vont changer. En règle générale, vous utilisez StringBuffers pour construire dynamiquement des données de caractères.

3. Combien d'objets sont créés au total par l'instruction suivante : String s="a"+"b"+"c"+"d";

Pour le code suivant :

String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");

La première instruction imprime un résultat false et la deuxième instruction imprime un résultat true. Cela montre que la compilation javac peut effectuer des expressions qui ajoutent directement des constantes de chaîne For. optimisation, il n'est pas nécessaire d'attendre l'exécution pour effectuer l'opération d'ajout. Au lieu de cela, le signe plus est supprimé lors de la compilation et directement compilé dans le résultat de la connexion de ces constantes.

La première ligne de code de la question est optimisée par le compilateur au moment de la compilation, ce qui équivaut à définir directement une chaîne de "abcd". Par conséquent, le code ci-dessus ne doit créer qu'un objet String. Écrivez les deux lignes de code suivantes,

String s ="a" + "b" +"c" + "d";
System.out.println(s== "abcd");

et le résultat final imprimé devrait être vrai.

4. Il y a une instruction return dans try {}, donc le code dansfinal{} immédiatement après cet essai sera-t-il exécuté ?

Nous savons que l'instruction dansfinal{} sera définitivement exécutée, donc cela peut être laissé échapper normalement avant le retour, et cette méthode peut sortir après le retour. Qui sait où elle est allée ? précis pour l'exécuter au milieu du retour. Veuillez consulter le résultat d'exécution du code de programme suivant :

public classTest {
    public static void main(String[]args) {
       System.out.println(newTest().test());;
    }
    static int test()
    {
       intx = 1;
       try
       {
          returnx;
       }
       finally
       {
          ++x;
       }
    }
  
}
---------执行结果 ---------
1

Le résultat d'exécution est 1. Pourquoi ? Le processus de la fonction principale appelant la sous-fonction et obtenant le résultat est comme la fonction principale préparant un pot vide. Lorsque la sous-fonction veut renvoyer le résultat, elle met d'abord le résultat dans le pot, puis renvoie le programme. logique à la fonction principale. Le soi-disant retour signifie que la sous-fonction dit : "Je ne l'exécuterai plus. Laissez votre fonction principale continuer à s'exécuter. Il n'y a aucun résultat. Le résultat est mis dans le pot avant de dire cela."

(Tutoriel vidéo recommandé : cours java)

5. La différence entre final, enfin et finaliser.

final est utilisé pour déclarer des attributs, des méthodes et des classes, ce qui signifie respectivement que les attributs sont immuables, que les méthodes ne peuvent pas être remplacées et que les classes ne peuvent pas être héritées. Pour que les classes internes accèdent aux variables locales, les variables locales doivent être définies comme type final.

finally fait partie de la structure de l'instruction de gestion des exceptions, ce qui signifie qu'elle est toujours exécutée.

finalize est une méthode de la classe Object. Cette méthode de l'objet recyclé sera appelée lors de l'exécution du garbage collector. Cette méthode peut être remplacée pour fournir d'autres ressources de recyclage lors du garbage collection, comme la fermeture de fichiers, etc. Cependant, la JVM ne garantit pas que cette méthode sera toujours appelée

6. Quelles sont les similitudes et les différences entre les exceptions d'exécution et les exceptions générales ?

Les exceptions représentent des conditions anormales qui peuvent survenir lors de l'exécution du programme. Les exceptions d'exécution représentent des exceptions qui peuvent être rencontrées dans le fonctionnement normal d'une machine virtuelle et constituent une erreur de fonctionnement courante. Le compilateur Java exige que les méthodes soient déclarées pour lever des exceptions non-exécutables qui peuvent survenir, mais il n'est pas nécessaire de les déclarer pour lever des exceptions d'exécution non interceptées.

7. Quelle est la différence entre une erreur et une exception ?

une erreur indique un problème grave lorsque la récupération n'est pas impossible mais difficile. Par exemple, débordement de mémoire. Il est impossible d’attendre d’un programme qu’il puisse gérer une telle situation. l’exception représente un problème de conception ou de mise en œuvre. Autrement dit, cela représente une situation qui ne se produirait jamais si le programme fonctionnait normalement.

8. Parlez brièvement des principes simples et des applications du mécanisme de gestion des exceptions en Java.

Les exceptions font référence à des situations anormales ou à des erreurs qui se produisent lors de l'exécution d'un programme Java (non compilé). Elles sont très similaires aux événements de la vie réelle. Les événements de la vie réelle peuvent inclure l'heure, le lieu, le personnage, l'intrigue, etc. de l'événement. Les informations peuvent être représentées par un objet. Java utilise une approche orientée objet pour gérer les exceptions. Il encapsule chaque exception qui se produit dans le programme dans un objet pour la représenter.

Java classe les exceptions. Différents types d'exceptions sont représentés par différentes classes Java. La classe racine de toutes les exceptions est java.lang.Throwable, et deux sous-classes sont dérivées de Throwable :

Error et Exception, l'erreur représente un problème grave que l'application elle-même ne peut pas surmonter et récupérer. Le programme ne fera que planter. Par exemple, des problèmes système tels qu'un débordement de mémoire et un blocage de thread.

Une exception indique un problème que le programme peut encore surmonter et récupérer, qui est divisé en exceptions système et exceptions ordinaires :

Les exceptions système sont des problèmes causés par des défauts dans le logiciel lui-même, c'est-à-dire que les problèmes logiciels causés par une mauvaise considération des développeurs ne peuvent pas être surmontés et récupérés par les utilisateurs du logiciel. Cependant, en cas de tels problèmes, le système logiciel peut continuer à fonctionner ou le logiciel se bloque. Par exemple, un script de tableau est hors limites (ArrayIndexOutOfBoundsException). ), exception de pointeur vide (NullPointerException), exception de conversion de classe (ClassCastException

Les exceptions courantes sont des problèmes causés par des changements ou des exceptions dans l'environnement en cours d'exécution, qui sont des problèmes que les utilisateurs peuvent surmonter, tels qu'une déconnexion du réseau, insuffisante); espace disque dur, après qu'une telle exception se produise, le programme ne devrait pas mourir.

Java fournit différentes solutions pour les exceptions système et les exceptions ordinaires. Le compilateur force les exceptions ordinaires à être traitées par try..catch ou à continuer à être lancées vers la méthode d'appel de la couche supérieure avec une instruction throws, de sorte que les exceptions ordinaires sont également appelées exceptions vérifiées, et les exceptions système peuvent être traitées ou non. Par conséquent, le compilateur ne force pas le traitement try..catch ni ne lance de déclaration, donc les exceptions système sont également appelées exceptions non vérifiées.

(Tutoriel recommandé : Tutoriel d'introduction à Java)

9. Quelle est la différence entre le tas et la pile en Java ?

Le tas et la pile dans JVM appartiennent à différentes zones de mémoire et sont utilisés à des fins différentes. La pile est souvent utilisée pour stocker les cadres de méthode et les variables locales, tandis que les objets sont toujours alloués sur le tas. La pile est généralement plus petite que le tas et n'est pas partagée entre plusieurs threads, alors que le tas est partagé par tous les threads de l'ensemble de la JVM.

Pile : Certains types de variables de base et variables de référence d'objet définies dans la fonction sont allouées dans la mémoire de pile de la fonction. Lorsqu'une variable est définie dans un bloc de code, Java l'attribuera à la pile. La pile. Les variables allouent de l'espace mémoire. Lorsque la portée de la variable est dépassée, Java libère automatiquement l'espace mémoire alloué à la variable et l'espace mémoire peut être immédiatement utilisé à d'autres fins.

Heap : La mémoire du tas est utilisée pour stocker les objets et les tableaux créés par new. La mémoire allouée dans le tas est gérée par le garbage collector automatique de la machine virtuelle Java. Une fois qu'un tableau ou un objet est généré dans le tas, vous pouvez également définir une variable spéciale dans la pile, de sorte que la valeur de la variable dans la pile soit égale à la première adresse du tableau ou de l'objet dans la mémoire du tas. dans la pile devient Après avoir obtenu la variable de référence du tableau ou de l'objet, vous pouvez utiliser la variable de référence dans la pile pour accéder au tableau ou à l'objet dans le tas dans le programme. La variable de référence équivaut à donner un nom au tableau ou. objet.

10. Un int peut-il être contraint en une variable de type octet ? Que se passera-t-il si la valeur est supérieure à la plage du type d'octet ?

Nous pouvons effectuer une conversion forcée, mais en Java, int est de 32 bits et l'octet est de 8 bits, donc si vous forcez la conversion, les 24 bits de poids fort du type int seront ignorés, car l'octet Le la plage de types va de -128 à 127.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer