Maison > Java > JavaQuestions d'entretien > Questions d'entretien de base sur Java (3)

Questions d'entretien de base sur Java (3)

(*-*)浩
Libérer: 2019-12-03 15:14:05
original
2129 Les gens l'ont consulté

Questions d'entretien de base sur Java (3)

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. (Apprentissage recommandé : Questions d'entretien Java )

Newstring Chaque fois, créez un nouvel objet Il 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. Il est extrait directement du tampon et un StringObject est créé

Mais si 'xyz' n'a pas été utilisé auparavant, alors ; A 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.


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 Données de caractères pour les personnages. 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 des caractères vont changer. En règle générale, vous utilisez StringBuffers pour construire dynamiquement des données de caractères.

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");
Copier après la connexion

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 ajouter directement des constantes de chaîne. Pour optimiser l'expression, il n'est pas nécessaire d'attendre le moment de l'exécution pour effectuer l'opération d'ajout. Au lieu de cela, le signe plus est supprimé lors de la compilation et il est 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");
Copier après la connexion

Le résultat final imprimé doit être vrai.

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

Nous savons que l'instruction dansfinal{} sera définitivement exécutée, donc elle peut être lâchée normalement avant le retour, et cette méthode peut sortir après le retour, qui sait où elle est allée, mais plus Pour être précis, elle. doit être exécuté au milieu du retour. Veuillez voir le résultat de l'exécution du code du programme ci-dessous :


public classTest {
    public static void main(String[]args) {
       System.out.println(newTest().test());;
    }
    static int test()
    {
       intx = 1;
       try
       {
          returnx;
       }
       finally
       {
          ++x;
       }
    }
  
}
Copier après la connexion

--------------Résultat de l'exécution---------

1
Copier après la connexion

Le résultat de l'opération est 1, pourquoi ?

Le processus par lequel la fonction principale appelle la sous-fonction et obtient 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 la logique du programme à la fonction principale .

Le soi-disant retour signifie que la sous-fonction dit, je ne fonctionnerai plus, votre fonction principale peut continuer à s'exécuter. Il n'y a aucun résultat. Le résultat est mis dans le pot avant de dire. ce.

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 substituée pour fournir d'autres ressources de recyclage lors du garbage collection, comme. fermeture de dossiers, etc. Mais la JVM ne garantit pas que cette méthode sera toujours appelée


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.


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

une erreur indique un problème grave dans une situation où 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 gère 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.


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. L’information peut être représentée 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, et l'objet contient des informations sur les exceptions.

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 :

Erreur 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 surmonter et résoudre, qui est divisé en exceptions système et exceptions ordinaires :

Les exceptions système sont le logiciel lui-même. Les problèmes causés par des défauts sont des problèmes causés par une mauvaise prise en compte par les développeurs de logiciels. Les utilisateurs de logiciels ne peuvent pas surmonter et récupérer de ce problème, mais en cas de tels problèmes, ils peuvent toujours permettre au système logiciel de continuer à fonctionner ou de bloquer le logiciel.

Par exemple, script de tableau hors limites (ArrayIndexOutOfBoundsException), exception de pointeur nul (NullPointerException), exception de conversion de classe (ClassCastException)

Les exceptions ordinaires sont des problèmes causés par des modifications ou des exceptions dans ; l'environnement d'exécution et sont des problèmes que les utilisateurs peuvent surmonter, tels qu'une déconnexion du réseau et un espace disque insuffisant, ne devraient pas entraîner la mort du programme après que de telles exceptions se produisent.


Java fournit différentes solutions pour les exceptions système et les exceptions ordinaires. Le compilateur force les exceptions ordinaires à être gérées par try..catch ou à continuer à être lancées vers la méthode d'appel de la couche supérieure avec une instruction throws, donc 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.

Quelle est la différence entre tas et 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 base de variables et de variables de référence d'objet définies dans la fonction sont alloués dans la mémoire de pile de la fonction Lorsqu'une variable est définie dans un bloc de code, Java Just. allouez de l'espace mémoire pour cette variable sur la pile. 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.

Après avoir généré un tableau ou un objet dans le tas, vous pouvez également définir une variable spéciale dans la pile, afin que la valeur de cette variable dans la pile soit égale à la première adresse du tableau ou de l'objet dans le tas de mémoire.La pile Cette variable devient une variable de référence du tableau ou de l'objet. À l'avenir, vous pourrez utiliser la variable de référence dans la pile pour accéder au tableau ou à l'objet dans le tas dans le programme. donner un nom au tableau ou à l'objet.

Int peut-il être forcé dans 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 int en Java est de 32 bits et l'octet est de 8 bits. Par conséquent, en cas de conversion forcée, les 24 bits de poids fort du type int seront ignorés, car l'octet. la plage de caractères va de -128 à 128.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal