Computing">
Comprendre l'opérateur instanceof en Java
Comprendre l'opérateur instanceof en Java
L'instanceof en Java est également appelée opérateur de comparaison de type car elle compare l'instance à type. Il
retourne soit vrai ou faux. Si nous appliquons l'opérateur instanceof à toute variable ayant une valeur null, elle renvoie
false. Prenons l'exemple suivant.
1. class Simple1{
2. public static void main(String args[]){
3. Simple1 s=new Simple1();
4. [Link](s instanceof Simple1);//true
5. }
6. }
Testez-le maintenant
Sortie
true
Un objet de type sous-classe est également un type de classe parent. Par exemple, si Chien étend Animal, l'objet de
Chien peut être référencé par la classe Dog ou Animal.
o Abstract Class
o Interface
Plus de détails.
Sortie
111) Le programme suivant est-il écrit correctement? Si oui, quel sera le résultat du
programme?
Oui, le programme est écrit correctement. La classe Main fournit la définition de la méthode abstraite multiply déclarée
dans la classe abstraite Calculation. Le résultat du programme sera:
Sortie
384
112) Pouvez-vous utiliser les méthodes abstraite et finale avec une méthode?
Non, car nous devons remplacer la méthode abstraite pour fournir son implémentation, alors que nous ne pouvons pas
remplacer la méthode finale.
113) Est-il possible d'instancier la classe abstraite?
Non, la classe abstraite ne peut jamais être instanciée même si elle contient un constructeur et que toutes ses
méthodes sont implémentées.
Une classe abstraite peut avoir un corps de méthode L'interface n'a que des méthodes abstraites.
(méthodes non abstraites).
Une classe abstraite peut avoir des variables d'instance. Une interface ne peut pas avoir de variables
d'instance.
Une classe abstraite peut avoir le constructeur. L'interface ne peut pas avoir le constructeur.
Une classe abstraite peut avoir des méthodes statiques. L'interface ne peut pas avoir de méthodes statiques.
Vous pouvez étendre une classe abstraite. Vous pouvez implémenter plusieurs interfaces.
La classe abstraite peut fournir l'implémentation de L'interface ne peut pas fournir l'implémentation
l'interface . de la classe abstraite .
Le mot clé abstract est utilisé pour déclarer une classe Le mot clé interface est utilisé pour déclarer une
abstraite. interface.
Une classe abstraite peut étendre une autre classe Java Une interface peut uniquement étendre une autre
et implémenter plusieurs interfaces Java. interface Java.
Une classe abstraite peut être étendue en utilisant Une classe d'interface peut être implémentée en
mot - clé extend utilisant des implements de mots clés
Une classe abstraite Java peut avoir des membres de Les membres d'une interface Java sont publics par
classe comme privés, protégés, etc. défaut.
Exemple: Exemple:
classe abstraite publique Shape { interface publique Drawable {
public abstract void draw (); void draw ();
} }
119) Peut-on définir des modificateurs privés et protégés pour les membres dans les
interfaces?
Non, ils sont implicitement publics.
120) Quand une référence d'objet peut-elle être convertie en une référence
d'interface?
Une référence d'objet peut être convertie en une référence d'interface lorsque l'objet implémente l'interface
référencée.
o En fournissant uniquement la méthode setter ou getter, vous pouvez rendre la classe en lecture seule ou en
écriture seule. En d'autres termes, vous pouvez ignorer les méthodes getter ou setter.
o Il vous permet de contrôler les données. Supposons que vous souhaitiez définir la valeur de id, qui ne devrait
être supérieure à 100, vous pouvez écrire la logique dans la méthode setter. Vous pouvez écrire la logique
pour ne pas stocker les nombres négatifs dans les méthodes de définition.
o C'est un moyen de masquer les données en Java car les autres classes ne pourront pas accéder aux données
via les membres de données privées.
o La classe encapsulate est facile à tester. Donc, c'est mieux pour les tests unitaires.
o Les IDE standard fournissent la possibilité de générer les getters et les setters. Il est donc facile et rapide de
créer une classe encapsulée en Java.
1. //save as [Link]
2. package mypack;
3. public class Simple{
4. public static void main(String args[]){
5. [Link]("Welcome to package");
6. }
7. }
o Définissez un package nom_package . Créez la classe avec le nom class_name et enregistrez ce fichier
avec your_class_name.java .
La commande ci-dessus crée le package avec le nom package_name dans le répertoire de travail actuel.
o Maintenant, exécutez le fichier de classe en utilisant le nom de fichier de classe absolu, comme suit.
1. java nom_package.nom_classe
127) Comment pouvons-nous accéder à une classe dans une autre classe en Java?
Il existe deux manières d'accéder à une classe d'une autre classe.
o En utilisant le nom complet: Pour accéder à une classe dans un package différent, vous devez utiliser le
nom complet de cette classe ou importer le package contenant cette classe.
o En utilisant le chemin relatif , nous pouvons utiliser le chemin de la classe associée au package contenant
notre classe. Ce peut être le même ou un sous-package.
Il est donné une liste de questions d'entrevue de traitement d'exception avec des réponses. Si vous connaissez une
question d’entretien avec une exception, veuillez la poster dans la section commentaire.
o Exception cochée(checked) : Les exceptions cochées sont celles qui sont vérifiées lors de la compilation. Par
exemple, SQLException, ClassNotFoundException, etc.
o Exception non contrôlée(unchecked) : les exceptions non contrôlées sont celles qui sont gérées au moment
de l'exécution car elles ne peuvent pas être vérifiées au moment de la compilation. Par exemple,
ArithmaticException, NullPointerException, ArrayIndexOutOfBoundsException, etc.
o Erreur(Error): Une erreur entraîne la fermeture du programme car ils ne sont pas récupérables. Par
exemple, OutOfMemoryError, AssertionError, etc.
136) Est-il nécessaire que chaque bloc try doit être suivi d'un bloc catch?
Il n'est pas nécessaire que chaque bloc try soit suivi d'un bloc catch. Il devrait être suivi d'un bloc catch OU d'un bloc
finally. Ainsi, toutes les exceptions susceptibles d'être levées doivent être déclarées dans la clause throws de la
méthode. Prenons l'exemple suivant.
Sortie:
Sortie
Explication
ArithmaticException est la sous-classe de Exception. Par conséquent, il ne peut pas être utilisé après
Exception. Comme Exception est la classe de base pour toutes les exceptions, elle doit donc être utilisée pour gérer
l’exception. Aucune classe ne peut être utilisée après cela.
Throw throws
1) Le mot-clé throw est utilisé pour lever Le throws mot - clé est utilisé pour déclarer une exception.
explicitement une exception.
2) Les exceptions vérifiées ne peuvent pas être L'exception cochée peut être propagée avec des throws
propagées uniquement par projection.
3) Le mot clé throw est suivi d'une instance. Le mot-clé throws est suivi par la classe.
4) Le mot clé throw est utilisé dans la méthode. Le throws mot - clé est utilisé avec la signature de la méthode.
5) Vous ne pouvez pas lancer plusieurs Vous pouvez déclarer plusieurs exceptions, par exemple,
exceptions. méthode publique void () lève IOException, SQLException.
Sortie
Explication
En Java, les objets throwable ne peuvent être lancés. Si nous essayons de lancer un objet entier, le compilateur
affichera une erreur car nous ne pouvons pas lancer le type de données de base d'un bloc de code.
Sortie
Explication
L'objet de calcul est lancé depuis le bloc try qui est pris dans le bloc catch. La classe add () de Calculation est appelée
avec les valeurs entières 10 et 20 en utilisant l'objet de cette classe. Par conséquent, la somme 30 est
imprimée. L'objet de la classe Main ne peut être levé que dans le cas où le type de l'objet est jetable. Pour ce faire,
nous devons élargir la classe des objets jetables.
1. class TestExceptionPropagation1{
2. void m(){
3. int data=50/0;
4. }
5. void n(){
6. m();
7. }
8. void p(){
9. try{
10. n();
11. }catch(Exception e){[Link]("exception handled");}
12. }
13. public static void main(String args[]){
14. TestExceptionPropagation1 obj=new TestExceptionPropagation1();
15. obj.p();
16. [Link]("normal flow...");
17. }
18. }
Sortie:
exception handled
normal flow...
Sortie
Explication
Dans la méthode principale, on appelle a () de Main, qui imprime un message et appelle b (). La méthode b () affiche un
message puis appelle c (). La méthode c () lève une exception qui est gérée par le bloc catch de la méthode
b. Cependant, il propage cette exception en utilisant throw Exception () à gérer par la méthode a (). Comme nous le
savons, le bloc final est toujours exécuté, c'est pourquoi le bloc final de la méthode b () est d'abord exécuté et affiche
un message. Enfin, l'exception est gérée par le bloc catch de la méthode a ().
Sortie
result = 290
Explication
La variable d'instance a de la classe Calculation est initialisée à 10 à l'aide du constructeur de la classe appelé lors de
l'instanciation de la classe. La méthode add est appelée et renvoie un résultat de valeur entière. Dans la méthode add
(), a est incrémenté de 10 pour être égal à 20. Ensuite, dans le premier bloc d’essai, 10 est à nouveau incrémenté de
10 pour être égal à 30. Dans le deuxième bloc d’essai, a est multiplié par 10 pour être égal à 300. try block lève
l'exception qui est interceptée par le bloc catch associé à ce bloc try. Le bloc catch modifie à nouveau la valeur de a en
la décrémentant de 10 pour en faire 290. Ainsi, la méthode add () renvoie 290 qui est affectée au résultat. Cependant,
le bloc catch associé au bloc try le plus à l'extérieur ne sera jamais exécuté car il n'y a pas d'exception pouvant être
gérée par ce bloc catch.
Une liste de questions d’entretien avec des réponses courtes et précises est donnée. Si vous connaissez une question
d’entretien avec le traitement des chaînes, merci de la poster dans la section commentaires.
149) Qu'est-ce que le pool de chaînes ( String pool)?
Le pool de chaînes est l'espace réservé dans la mémoire de pile pouvant être utilisé pour stocker les chaînes. Le
principal avantage de l'utilisation du pool String est que nous créons un littéral de chaîne. la machine virtuelle Java
vérifie d'abord le "pool de constantes de chaînes". Si la chaîne existe déjà dans le pool, une référence à l'instance en
pool est renvoyée. Si la chaîne n'existe pas dans le pool, une nouvelle instance de chaîne est créée et placée dans le
pool. Par conséquent, il enregistre la mémoire en évitant la duplication.
1. classe Testimmutablestring {
2. public static void main (String args []) {
3. String s = "Sachin" ;
4. [Link] ( "Tendulkar" ); // la méthode concat () ajoute la chaîne à la fin
5. [Link] (s); // imprimera Sachin car les chaînes sont des objets immuables
6. }
7. }
Sortie:
Sachin
1) String literal
1. String s = "bienvenue" ;
Chaque fois que vous créez un littéral de chaîne, la machine virtuelle Java vérifie d'abord le "pool de chaînes
constant". Si la chaîne existe déjà dans le pool, une référence à l'instance en pool est renvoyée. Si la chaîne n'existe
pas dans le pool, une nouvelle instance de chaîne est créée et placée dans le pool. Les objets de chaîne sont stockés
dans une zone de mémoire spéciale appelée pool de constantes de chaîne. Par exemple:
1. String s1 = "Bienvenue" ;
2. String s2 = "Bienvenue" ; // Il ne crée pas une nouvelle instance
Dans ce cas, la machine virtuelle Java crée un nouvel objet chaîne dans la mémoire heap normale (sans pool) et le
littéral "Welcome" est placé dans le pool de chaînes constantes. La variable s fera référence à l'objet dans un tas (non-
pool).
1. String s1 = "Bienvenue" ;
2. String s2 = "Bienvenue" ;
3. String s3 = "Bienvenue" ;
Un seul objet sera créé à l'aide du code ci-dessus car les chaînes en Java sont immuables.
Deux objets, l'un dans le pool de constantes de chaîne et l'autre dans le non-pool (tas).
Sortie
a equals b
Explication
L'opérateur == vérifie également si les références des deux objets de chaîne sont égales ou non. Bien que les deux
chaînes contiennent le même contenu, leurs références ne sont pas égales car elles sont créées de différentes façons
(constructeur et littéral de chaîne). Par conséquent, a == b est inégal. D'autre part, la méthode equal () vérifie toujours
le contenu. Etant donné que leur contenu est égal, un égal est alors imprimé.
157) Quel est le résultat du programme Java suivant?
Sortie
True
Explication
La méthode intern renvoie la référence à l'objet String du pool de chaînes. Dans ce cas, s1 est créé à l'aide de chaînes
littérales alors que s2 est créé à l'aide du pool String. Cependant, s2 est remplacé par la référence de s1 et
l'opérateur == renvoie true.
2) La chaîne est lente et consomme plus de mémoire lorsque Le StringBuffer est rapide et utilise
vous concattez trop de chaînes, car elle crée chaque fois une moins de mémoire lorsque vous
nouvelle instance. concaténez des chaînes.
3) La classe String remplace la méthode equals () de la classe La classe StringBuffer ne remplace pas
Object. Vous pouvez donc comparer le contenu de deux la méthode equals () de la classe Object.
chaînes avec la méthode equals ().
1) StringBuffer est synchronisé , c.-à-d. Qu'il StringBuilder n'est pas synchronisé , c'est -à- dire
est thread-safe. Cela signifie que deux threads ne qu'il n'est pas [Link] signifie que deux
peuvent pas appeler les méthodes de StringBuffer threads peuvent appeler les méthodes de
simultanément. StringBuilder simultanément.
2) StringBuffer est moins efficace que StringBuilder. StringBuilder est plus efficace que StringBuffer.
1. class Student{
2. int rollno;
3. String name;
4. String city;
5.
6. Student(int rollno, String name, String city){
7. [Link]=rollno;
8. [Link]=name;
9. [Link]=city;
10. }
11.
12. public String toString(){//overriding the toString() method
13. return rollno+" "+name+" "+city;
14. }
15. public static void main(String args[]){
16. Student s1=new Student(101,"Raj","lucknow");
17. Student s2=new Student(102,"Vijay","ghaziabad");
18.
19. [Link](s1);//compiler writes here [Link]()
20. [Link](s2);//compiler writes here [Link]()
21. }
22. }
Sortie:
101 Raj lucknow
102 Vijay Ghaziabad
162) Pourquoi CharArray () est préféré à String pour stocker le mot de passe?
La chaîne reste dans le pool de chaînes jusqu'à ce que les déchets soient collectés. Si nous stockons le mot de passe
dans une chaîne, celle-ci reste en mémoire pendant une période plus longue, et toute personne disposant de la
mémoire mémoire peut extraire le mot de passe sous forme de texte en clair. Par ailleurs, l’utilisation de CharArray
nous permet de le mettre à blanc chaque fois que nous en avons terminé avec le mot de passe. Cela évite la menace à
la sécurité avec la chaîne en nous permettant de contrôler la mémoire.
163) Écrire un programme Java pour compter le nombre de mots présents dans une
chaîne?
Programme:
Sortie
o MatchResult Interface
o Matcher class
o Pattern class
o PatternSyntaxException class
1. import [Link].*;
2. class RegexExample2{
3. public static void main(String args[]){
4. [Link]([Link](".s", "as")); //line 4
5. [Link]([Link](".s", "mk")); //line 5
6. [Link]([Link](".s", "mst")); //line 6
7. [Link]([Link](".s", "amms")); //line 7
8. [Link]([Link]("..s", "mas")); //line 8
9. }}
Sortie
true
false
false
false
true
Explication
la ligne 4 est vraie puisque le deuxième caractère de la chaîne est s, la ligne 5 est fausse car le deuxième caractère
n'est pas s, la ligne 6 est fausse car il y a plus de 3 caractères dans la chaîne, la ligne 7 est faux, il y en a plus de 2
caractères dans la chaîne et contenant plus de 2 caractères également, la ligne 8 est vraie puisque le troisième
caractère de la chaîne est s.
168) Quels sont les avantages des classes internes Java ( inner classes)?
Il existe deux types d’avantages des classes internes Java.
o Les classes imbriquées représentent un type spécial de relation, c'est-à-dire qu'elles peuvent accéder à tous
les membres (membres de données et méthodes) de la classe externe, y compris privé.
o Les classes imbriquées sont utilisées pour développer un code plus lisible et maintenable, car il regroupe
logiquement les classes et les interfaces dans un seul endroit.
o Optimisation du code: Cela nécessite moins de code pour écrire.
1. classe Java_Outer_class {
2. //code
3. classe Java_Nested_class {
4. //code
5. }
6. }
7.
Il existe deux types de classes imbriquées, une classe imbriquée statique et une classe imbriquée non statique. La
classe imbriquée non statique peut également être appelée classe interne.
o Les classes internes augmentent le nombre total de classes utilisées par le développeur, ce qui augmente la
charge de travail de la machine virtuelle Java, car elle doit effectuer certaines opérations de routine pour les
classes supplémentaires, ce qui entraîne des performances plus lentes.
o Les IDE fournissent moins de support aux classes internes que les classes de niveau supérieur et agacent
donc les développeurs tout en travaillant avec des classes internes.
171) Quels sont les types de classes internes (classe imbriquée non statique) utilisés
en Java?
Il existe principalement trois types de classes internes utilisées en Java.
Type Description
Membre Inner Class Une classe créée dans la classe et en dehors de la méthode.
Classe intérieure Une classe créée pour implémenter une interface ou une classe d'extension. Son nom est
anonyme décidé par le compilateur java.
172) Y a-t-il une différence entre les classes imbriquées et les classes
internes(nested classes and inner classes)?
Oui, les classes internes sont des classes imbriquées non statiques. En d'autres termes, nous pouvons dire que les
classes internes font partie des classes imbriquées.
173) Peut-on accéder à la variable locale non finale, à l'intérieur de la classe interne
locale?
Non, la variable locale doit être constante si vous souhaitez y accéder dans la classe interne locale.
Trois fichiers de classe seront créés, nommés [Link], Person $ [Link] et Person $ [Link].
Sortie:
nice fruits
1. interface Eatable{
2. void eat();
3. }
4. class TestAnnonymousInner1{
5. public static void main(String args[]){
6. Eatable e=new Eatable(){
7. public void eat(){[Link]("nice fruits");}
8. };
9. [Link]();
10. }
11. }
}
Testez-le maintenant
Sortie:
nice fruits
1. interface nom_interface {
2. ...
3. interface nested_interface_name {
4. ...
5. }
6. }
7.
o En annulant la référence
o En assignant une référence à une autre
o Par objet anonyme, etc.
1) Final est utilisé pour appliquer des restrictions sur finally, utilisé pour placer Finalize est utilisé pour
la classe, la méthode et la variable. La classe du code important, il effectuer le nettoyage
finale ne peut pas être héritée, la méthode finale sera exécuté qu’une juste avant qu'un objet
ne peut pas être remplacée et la valeur de la exception soit gérée ou ne soit nettoyé.
variable finale ne peut pas être modifiée. non.
2) Final est un mot clé. finnaly est un bloc. Finalize est une
méthode.
187) Quel est le but de la classe Runtime?
La classe Java Runtime est utilisée pour interagir avec un environnement d'exécution Java. La classe Java Runtime
fournit des méthodes pour exécuter un processus, appeler GC, obtenir de la mémoire totale et libre, etc. Il n'y a qu'une
seule instance de la classe [Link] disponible pour une seule application java. La méthode
[Link] () renvoie l'instance singleton de la classe Runtime.
Hiérarchie InputStream
191) Quelle est la différence entre la hiérarchie des classes Reader / Writer et la
hiérarchie des classes InputStream / OutputStream?
La hiérarchie de la classe Reader / Writer est orientée caractères et la hiérarchie de la classe InputStream /
OutputStream est orientée octets. Les classes ByteStream sont utilisées pour effectuer des entrées-sorties sur 8 octets,
tandis que les classes CharacterStream sont utilisées pour effectuer les entrées / sorties pour le système Unicode 16
bits. Il existe de nombreuses classes dans la hiérarchie de classes ByteStream, mais les classes les plus fréquemment
utilisées sont FileInputStream et FileOutputStream. FileReader et FileWriter sont les classes les plus fréquemment
utilisées dans la hiérarchie des classes CharacterStream.
192) Quelles sont les classes les plus super pour tous les flux(streams)?
Toutes les classes de flux (stream class) peuvent être divisées en deux types de classes: les classes ByteStream et les
classes CharacterStream. Les classes ByteStream sont ensuite divisées en classes InputStream et OutputStream. Les
classes CharacterStream sont également divisées en classes Reader et Writer. Les classes SuperMost pour toutes les
classes InputStream sont [Link] et pour toutes les classes de flux de sortie est [Link]. De
même, pour toutes les classes de lecteurs, la classe la plus avancée est [Link], et pour toutes les classes
d'écrivains, il s'agit de [Link].
1. import [Link];
2. public class FileOutputStreamExample {
3. public static void main(String args[]){
4. try{
5. FileOutputStream fout=new FileOutputStream("D:\\[Link]");
6. [Link](65);
7. [Link]();
8. [Link]("success...");
9. }catch(Exception e){[Link](e);}
10. }
11. }
La classe Java FileInputStream obtient les octets d'entrée d'un fichier. Il est utilisé pour la lecture de données
orientées octets (flux d'octets bruts) telles que des données image, audio, vidéo, etc. Vous pouvez également lire des
données de flux de caractères. Cependant, pour lire des flux de caractères, il est recommandé d'utiliser la classe
FileReader. Considérez l'exemple suivant pour lire des octets à partir d'un fichier.
1. import [Link];
2. public class DataStreamExample {
3. public static void main(String args[]){
4. try{
5. FileInputStream fin=new FileInputStream("D:\\[Link]");
6. int i=[Link]();
7. [Link]((char)i);
8.
9. [Link]();
10. }catch(Exception e){[Link](e);}
11. }
12. }
13.
o D: \\ IO \\ -: Cela indique que l'autorisation est associée à tous les sous-répertoires et fichiers de manière
récursive.
o D: \\ IO \\ *: Cela indique que l'autorisation est associée à tous les répertoires et fichiers de ce répertoire, à
l'exception des sous-répertoires.
Voyons un exemple simple dans lequel l'autorisation d'un chemin de répertoire est accordée avec une autorisation de
lecture et un fichier de ce répertoire est accordé pour une autorisation d'écriture.
1. package [Link];
2. import [Link].*;
3. import [Link];
4. public class FilePermissionExample{
5. public static void main(String[] args) throws IOException {
6. String srg = "D:\\IO Package\\[Link]";
7. FilePermission file1 = new FilePermission("D:\\IO Package\\-", "read");
8. PermissionCollection permission = [Link]();
9. [Link](file1);
10. FilePermission file2 = new FilePermission(srg, "write");
11. [Link](file2);
12. if([Link](new FilePermission(srg, "read,write"))) {
13. [Link]("Read, Write permission is granted for the path "+srg );
14. }else {
15. [Link]("No Read, Write permission is granted for the path "+srg); }
16. }
17. }
Sortie
1. import [Link];
2. import [Link];
3. import [Link];
4. public class Person
5. {
6. public static void main(String[] args) throws IOException
7. {
8. [Link]("Enter the name of the person");
9. BufferedReader reader = new BufferedReader(new InputStreamReader([Link]));
10. String name = [Link]();
11. [Link](name);
12. }
13. }
o Utilisation de la classe Scanner: la classe Java Scanner divise l’entrée en jetons à l’aide d’un délimiteur
qui est un espace par défaut. Il fournit de nombreuses méthodes pour lire et analyser diverses valeurs
primitives. La classe Java Scanner est largement utilisée pour analyser le texte de types chaîne et primitifs à
l'aide d'une expression régulière. La classe Java Scanner étend la classe Object et implémente les interfaces
Iterator et Closeable. Prenons l'exemple suivant.
1. import [Link].*;
2. public class ScannerClassExample2 {
3. public static void main(String args[]){
4. String str = "Hello/This is JavaTpoint/My name is Abhishek.";
5. //Create scanner with the specified String Object
6. Scanner scanner = new Scanner(str);
7. [Link]("Boolean Result: "+[Link]());
8. //Change the delimiter of this scanner
9. [Link]("/");
10. //Printing the tokenized Strings
11. [Link]("---Tokenizes String---");
12. while([Link]()){
13. [Link]([Link]());
14. }
15. //Display the new delimiter
16. [Link]("Delimiter used: " +[Link]());
17. [Link]();
18. }
19. }
o Utilisation de la classe Console: La classe Java Console est utilisée pour obtenir des entrées de la
console. Il fournit des méthodes pour lire des textes et des mots de passe. Si vous lisez le mot de passe à
l'aide de la classe Console, il ne sera pas affiché à l'utilisateur. La classe [Link] est attachée à la
console système en interne. La classe Console est introduite depuis la version 1.5. Prenons l'exemple suivant.
o
o import [Link];
o class ReadStringTest{
o public static void main(String args[]){
o Console c=[Link]();
o [Link]("Enter your name: ");
o String n=[Link]();
o [Link]("Welcome "+n);
o }
o }
Serialization Interview Questions
201) Comment éviter la sérialisation dans une classe enfant si la classe de base
implémente l'interface Serializable?
Il est très difficile d'empêcher la sérialisation de la classe enfant si la classe de base est destinée à implémenter
l'interface Serializable. Cependant, nous ne pouvons pas le faire directement, mais la sérialisation peut être évitée en
implémentant les méthodes writeObject () ou readObject () dans la sous-classe et en lançant NotSerializableException à
partir de ces méthodes. Prenons l'exemple suivant.
1. import [Link];
2. import [Link];
3. import [Link];
4. import [Link];
5. import [Link];
6. import [Link];
7. import [Link];
8. class Person implements Serializable
9. {
10. String name = " ";
11. public Person(String name)
12. {
13. [Link] = name;
14. }
15. }
16. class Employee extends Person
17. {
18. float salary;
19. public Employee(String name, float salary)
20. {
21. super(name);
22. [Link] = salary;
23. }
24. private void writeObject(ObjectOutputStream out) throws IOException
25. {
26. throw new NotSerializableException();
27. }
28. private void readObject(ObjectInputStream in) throws IOException
29. {
30. throw new NotSerializableException();
31. }
32.
33. }
34. public class Test
35. {
36. public static void main(String[] args)
37. throws Exception
38. {
39. Employee emp = new Employee("Sharma", 10000);
40.
41. [Link]("name = " + [Link]);
42. [Link]("salary = " + [Link]);
43.
44. FileOutputStream fos = new FileOutputStream("[Link]");
45. ObjectOutputStream oos = new ObjectOutputStream(fos);
46.
47. [Link](emp);
48.
49. [Link]();
50. [Link]();
51.
52. [Link]("Object has been serialized");
53.
54. FileInputStream f = new FileInputStream("[Link]");
55. ObjectInputStream o = new ObjectInputStream(f);
56.
57. Employee emp1 = (Employee)[Link]();
58.
59. [Link]();
60. [Link]();
61.
62. [Link]("Object has been deserialized");
63.
64. [Link]("name = " + [Link]);
65. [Link]("salary = " + [Link]);
66. }
67. }
1. import [Link].*;
2. class Depersist{
3. public static void main(String args[])throws Exception{
4.
5. ObjectInputStream in=new ObjectInputStream(new FileInputStream("[Link]"));
6. Student s=(Student)[Link]();
7. [Link]([Link]+" "+[Link]);
8.
9. [Link]();
10. }
11. }
211 ravi
206) Quelle est la différence entre une interface sérialisable et une interface
extensible?
1) L’interface Serializable n’a pas de méthode, L'interface Externalizable contient n'est pas une interface
c’est-à-dire une interface marqueur. de marqueur, elle contient deux méthodes, à savoir
writeExternal () et readExternal ().
2) Il est utilisé pour "marquer" les classes Java L’interface Externalizable permet au programmeur de
afin que les objets de ces classes puissent contrôler la logique de sérialisation.
obtenir certaines capacités.
3) Il est facile à mettre en œuvre mais présente Il est utilisé pour effectuer la sérialisation et entraîne
un coût de performance supérieur. souvent de meilleures performances.
4) Aucun constructeur de classe n'est appelé en Nous devons appeler un constructeur public par défaut
sérialisation. lors de l'utilisation de cette interface.
.
o Adresse IP du serveur
o port number
209) Quelles sont les étapes à suivre lorsque deux ordinateurs se connectent via
TCP?
Les étapes suivantes sont effectuées lorsque deux ordinateurs se connectent via TCP.
o L'objet ServerSocket est instancié par le serveur qui indique le numéro de port sur lequel la connexion sera
établie.
o Après l’instanciation de l’objet ServerSocket, le serveur appelle la méthode accept () de la classe
ServerSocket, ce qui fait attendre le serveur jusqu’à ce que le client tente de se connecter au serveur sur le
port donné.
o Pendant ce temps, le serveur est en attente, un socket est créé par le client en instanciant la classe
Socket. Le constructeur de la classe socket accepte le numéro de port et le nom du serveur.
o Le constructeur de la classe Socket tente de se connecter au serveur avec le nom spécifié. Si la connexion est
établie, le client disposera d'un objet socket pouvant communiquer avec le serveur.
o La méthode accept () appelée par le serveur renvoie une référence au nouveau socket sur le serveur
connecté au serveur.
210) Écrire un programme en Java pour établir une connexion entre le client et le
serveur?
1. import [Link].*;
2. import [Link].*;
3. public class InetDemo{
4. public static void main(String[] args){
5. try{
6. InetAddress ip=[Link]("[Link]");
7.
8. [Link]("Host Name: "+[Link]());
9. }catch(Exception e){[Link](e);}
10. }
11. }
12.
o Fournit des méthodes pour obtenir les métadonnées d'une classe au moment de l'exécution.
o Fournit des méthodes pour examiner et modifier le comportement d'exécution d'une classe.
o Méthode forName () de la classe Classe: La méthode forName () permet de charger la classe de manière
dynamique. Il retourne l'instance de classe classe. Il devrait être utilisé si vous connaissez le nom complet de
la classe. Cela ne peut pas être utilisé pour les types primitifs.
o Méthode getClass () de la classe Object: Renvoie l'instance de la classe Class. Il devrait être utilisé si
vous connaissez le type. De plus, il peut être utilisé avec des primitives.
o La syntaxe .class: Si un type est disponible mais qu'il n'y a pas d'instance, il est possible d'obtenir une
classe en ajoutant ".class" au nom du type. Il peut également être utilisé pour le type de données primitif.
215) Quel est le résultat du programme Java suivant?
1. class Simple{
2. public Simple()
3. {
4. [Link]("Constructor of Simple class is invoked");
5. }
6. void message(){[Link]("Hello Java");}
7. }
8.
9. class Test1{
10. public static void main(String args[]){
11. try{
12. Class c=[Link]("Simple");
13. Simple s=(Simple)[Link]();
14. [Link]();
15. }catch(Exception e){[Link](e);}
16. }
17. }
Sortie
Explication
La méthode newInstance () de la classe Class est utilisée pour appeler le constructeur à l'exécution. Dans ce
programme, l'instance de la classe Simple est créée.
Syntaxe
javap nom_classe_classe
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
Cela peut se produire lorsqu'un objet de classe wrapper est attendu et qu'un type de données primitif est fourni, ou
inversement.
Sortie
bye
Explication
La classe Integer met en cache les valeurs entières comprises entre -127 et 127. Par conséquent, les objets Integer ne
peuvent être créés que dans la plage -128 à 127. L'opérateur == ne fonctionnera pas pour les valeurs supérieures à
127; ainsi bye est imprimé.
o Vous n'avez pas besoin d'écrire des codes longs et répétitifs. Utilisez simplement une classe abstraite avec
une méthode clone () longue de 4 ou 5 lignes.
o C’est le moyen le plus simple et le plus efficace de copier des objets, surtout si nous l’appliquons à un projet
déjà développé ou ancien. Il suffit de définir une classe parent, d’implémenter Cloneable dans celle-ci, de
fournir la définition de la méthode clone () et la tâche sera effectuée.
o Clone () est le moyen le plus rapide de copier le tableau.
o Pour utiliser la méthode [Link] (), nous devons modifier de nombreuses syntaxes dans notre code,
telles que l'implémentation d'une interface Cloneable, la définition de la méthode clone (), la gestion de
CloneNotSupportedException et enfin l'appel de [Link] (), etc.
o Nous devons implémenter l'interface Cloneable alors qu'elle ne contient aucune méthode. Nous devons
l'utiliser pour indiquer à la machine virtuelle Java que nous pouvons effectuer un clone () sur notre objet.
o [Link] () est protégé, nous devons donc fournir notre propre clone () et appeler indirectement
[Link] () à partir de celui-ci.
o [Link] () n'appelle pas de constructeur, nous n'avons donc aucun contrôle sur la construction de l'objet.
o Si vous souhaitez écrire une méthode de clonage dans une classe enfant, toutes ses superclasses doivent
définir la méthode clone () ou en hériter d'une autre classe parente. Sinon, la chaîne [Link] () échouera.
o [Link] () ne prend en charge que la copie superficielle, mais nous aurons besoin de la remplacer si un
clonage en profondeur est nécessaire.
o Entrée standard
o Flux de sortie d'erreur
o Sortie standard
o méthode utilitaire pour copier la partie d'un tableau
o utilitaires pour charger des fichiers et des bibliothèques
Il existe les trois champs de la classe Java System, c’est-à-dire, static printstream err, entrée statique dans et flux de
sortie standard.
226) Qu'est-ce qui vous vient à l'esprit lorsque quelqu'un mentionne une copie
superficielle en Java?
Clonage d'objets.
1. class Singleton{
2. private static Singleton single_instance = null;
3. int i;
4. private Singleton ()
5. {
6. i=90;
7. }
8. public static Singleton getInstance()
9. {
10. if(single_instance == null)
11. {
12. single_instance = new Singleton();
13. }
14. return single_instance;
15. }
16. }
17. public class Main
18. {
19. public static void main (String args[])
20. {
21. Singleton first = [Link]();
22. [Link]("First instance integer value:"+first.i);
23. first.i=first.i+90;
24. Singleton second = [Link]();
25. [Link]("Second instance integer value:"+second.i);
26. }
27. }
228) Ecrivez un programme Java qui affiche toutes les valeurs données en ligne de
commande.
Programme
1. class A{
2. public static void main(String args[]){
3.
4. for(int i=0;i<[Link];i++)
5. [Link](args[i]);
6.
7. }
8. }
1. compile by > javac [Link]
2. run by > java A sonoo jaiswal 1 3 abc
Sortie
sonoo
Jaiswal
1
3
abc
229) Quels conteneurs utilisent une présentation de bordure comme présentation par
défaut?
Les classes Window, Frame et Dialog utilisent une présentation de bordure comme présentation par défaut.
230) Quels conteneurs utilisent un FlowLayout comme modèle par défaut?
Les classes Panel et Applet utilisent FlowLayout comme présentation par défaut.
Lorsqu'une applet est créée, les méthodes suivantes sont appelées dans l'ordre.
o init()
o start()
o paint()
Lorsqu'une applet est détruite, les fonctions suivantes sont appelées dans l'ordre.
o stop()
o destroy(
236) Pouvez-vous écrire une classe Java qui pourrait être utilisée à la fois comme
une applet et une application?
Oui. Ajoutez une méthode main () à l'applet.
1. import [Link].*;
2. public class LocaleExample {
3. public static void main(String[] args) {
4. Locale locale=[Link]();
5. //Locale locale=new Locale("fr","fr");//for the specific locale
6.
7. [Link]([Link]());
8. [Link]([Link]());
9. [Link]([Link]());
10. [Link](locale.getISO3Country());
11. [Link](locale.getISO3Language());
12. [Link]([Link]());
13. [Link]([Link]());
14.
15. }
16. }
Sortie:
États Unis
Anglais
États Unis Anglais)
USA
eng
en
NOUS
1. //[Link]
2. package mypack;
3. public class Employee implements [Link]{
4. private int id;
5. private String name;
6. public Employee(){}
7. public void setId(int id){[Link]=id;}
8. public int getId(){return id;}
9. public void setName(String name){[Link]=name;}
10. public String getName(){return name;}
11. }
Skeleton
Le squelette est un objet, joue le rôle de passerelle pour l’objet côté serveur. Toutes les demandes entrantes y sont
acheminées. Lorsque le squelette reçoit la demande entrante, il effectue les tâches suivantes:
244) Quelles sont les étapes à suivre pour écrire des programmes basés sur RMI?
Il existe 6 étapes pour écrire des programmes basés sur RMI.
Sortie:
1. import [Link].*;
2. public class BinarySearch {
3. public static void main(String[] args) {
4. int[] arr = {16, 19, 20, 23, 45, 56, 78, 90, 96, 100};
5. int item, location = -1;
6. [Link]("Enter the item which you want to search");
7. Scanner sc = new Scanner([Link]);
8. item = [Link]();
9. location = binarySearch(arr,0,9,item);
10. if(location != -1)
11. [Link]("the location of the item is "+location);
12. else
13. [Link]("Item not found");
14. }
15. public static int binarySearch(int[] a, int beg, int end, int item)
16. {
17. int mid;
18. if(end >= beg)
19. {
20. mid = (beg + end)/2;
21. if(a[mid] == item)
22. {
23. return mid+1;
24. }
25. else if(a[mid] < item)
26. {
27. return binarySearch(a,mid+1,end,item);
28. }
29. else
30. {
31. return binarySearch(a,beg,mid-1,item);
32. }
33. }
34. return -1;
35. }
Sortie:
Output:
1. import [Link];
2.
3. public class Leniear_Search {
4. public static void main(String[] args) {
5. int[] arr = {10, 23, 15, 8, 4, 3, 25, 30, 34, 2, 19};
6. int item,flag=0;
7. Scanner sc = new Scanner([Link]);
8. [Link]("Enter Item ?");
9. item = [Link]();
10. for(int i = 0; i<10; i++)
11. {
12. if(arr[i]==item)
13. {
14. flag = i+1;
15. break;
16. }
17. else
18. flag = 0;
19. }
20. if(flag != 0)
21. {
22. [Link]("Item found at location" + flag);
23. }
24. else
25. [Link]("Item not found");
26.
27. }
28. }
Sortie:
Enter Item ?
23
Item found at location 2
Enter Item ?
22
Item not found
Sortie:
Tableau trié
23
23
23
34
45
65
67
89
90
101
Sortie:
Le tableau trié est:
23
23
23
34
45
65
67
89
90
101
254) Ecrivez un programme en Java pour créer une liste doublement chaînée
contenant n nœuds.
Considérez le programme suivant pour créer une liste à double liaison contenant n nœuds.
Output:
256) Write a program in Java to calculate the difference between the sum of the odd
level and even level nodes of a Binary Tree.
Consider the following program.
1. import [Link];
2. import [Link];
3.
4. public class DiffOddEven {
5.
6. //Represent a node of binary tree
7. public static class Node{
8. int data;
9. Node left;
10. Node right;
11.
12. public Node(int data){
13. //Assign data to the new node, set left and right children to null
14. [Link] = data;
15. [Link] = null;
16. [Link] = null;
17. }
18. }
19.
20. //Represent the root of binary tree
21. public Node root;
22.
23. public DiffOddEven(){
24. root = null;
25. }
26.
27. //difference() will calculate the difference between sum of odd and even levels of binary tree
28. public int difference() {
29. int oddLevel = 0, evenLevel = 0, diffOddEven = 0;
30.
31. //Variable nodesInLevel keep tracks of number of nodes in each level
32. int nodesInLevel = 0;
33.
34. //Variable currentLevel keep track of level in binary tree
35. int currentLevel = 0;
36.
37. //Queue will be used to keep track of nodes of tree level-wise
38. Queue<Node> queue = new LinkedList<Node>();
39.
40. //Check if root is null
41. if(root == null) {
42. [Link]("Tree is empty");
43. return 0;
44. }
45. else {
46. //Add root node to queue as it represents the first level
47. [Link](root);
48. currentLevel++;
49.
50. while([Link]() != 0) {
51.
52. //Variable nodesInLevel will hold the size of queue i.e. number of elements in queue
53. nodesInLevel = [Link]();
54.
55. while(nodesInLevel > 0) {
56. Node current = [Link]();
57.
58. //Checks if currentLevel is even or not.
59. if(currentLevel % 2 == 0)
60. //If level is even, add nodes's to variable evenLevel
61. evenLevel += [Link];
62. else
63. //If level is odd, add nodes's to variable oddLevel
64. oddLevel += [Link];
65.
66. //Adds left child to queue
67. if([Link] != null)
68. [Link]([Link]);
69. //Adds right child to queue
70. if([Link] != null)
71. [Link]([Link]);
72. nodesInLevel--;
73. }
74. currentLevel++;
75. }
76. //Calculates difference between oddLevel and evenLevel
77. diffOddEven = [Link](oddLevel - evenLevel);
78. }
79. return diffOddEven;
80. }
81.
82. public static void main (String[] args) {
83.
84. DiffOddEven bt = new DiffOddEven();
85. //Add nodes to the binary tree
86. [Link] = new Node(1);
87. [Link] = new Node(2);
88. [Link] = new Node(3);
89. [Link] = new Node(4);
90. [Link] = new Node(5);
91. [Link] = new Node(6);
92.
93. //Display the difference between sum of odd level and even level nodes
94. [Link]("Difference between sum of odd level and even level nodes: " + [Link]());
95. }
96. }
Output: