Java Flashcards
Décomposez l’instruction public static void main(String args[]) ?
publicest un modificateur d’accès. Nous l’utilisons pour spécifier l’accès à cette méthode. Ici, le modificateur est « public », ainsi n’importe quelle classe peut accéder à cette méthode.
static. Ce mot-clé Java signifie que nous utilisons cette méthode sans créer d’objet de la classe.
Voidest le type de retour de la méthode. Cela signifie que la méthode ne renvoie aucune valeur.
mainest le nom de la méthode. La machine virtuelle Java (JVM) traite ce nom comme le point d’entrée de l’application (il doit avoir une signature spécifique).Mainest la méthode où l’exécution principale se produit.
String args[]. Il s’agit du paramètre passé à la méthode main. Ici, nous avons des arguments du type String que notre application Java accepte lorsque nous l’exécutons. Tu peux les saisir dans la console.
Quelle est la différence entre equals(). et ==?
Tout d’abord, == est un opérateur, tandis qu’equals() est une méthode. Nous utilisons l’opérateur == pour la comparaison de références (ou d’adresses), et la méthode equals() pour la comparaison de contenu. Cela signifie que == vérifie si les deux objets pointent vers le même emplacement de mémoire, tandis qu’equals() compare les valeurs contenues dans les objets.
Peut-on exécuter un programme sans la méthode main() ?
Tu peux utiliser un bloc static pour initialiser un membre de données static. Il est exécuté avant la méthode main, lorsque les classes sont chargées.
class Example{
Static{
System.out.println(“static block is invoked”);
}
public static void main(String args[]){
System.out.println(“Now main method”);
}
}
Ce qui est affiché :
static block is invoked
Now main method
Et si la méthode main est complètement absente ? Si tu essaies d’exécuter une classe ordinaire sans méthode main du tout, tu obtiendras l’erreur suivante : Main method not found in class Test, please define the main method as: public static void main (String [] args) or a JavaFX application class must extend javafx.application.Application. L’erreur elle-même indique que s’il s’agit d’une application JavaFX et que la classe est héritée de javafx.application.Application, alors c’est possible.
Qu’est-ce qu’un objet immutable ? Peut-on modifier un objet immutable ?
Tu ne peux pas modifier les objets d’une classe immutable une fois qu’ils sont créés. En d’autres termes, une fois que tu les crées, tu ne peux pas les modifier. Si tu essaies de modifier un objet Immutable, tu obtiendras un nouvel objet (clone) et tu modifieras ce clone pendant sa création.
String en est un bon exemple. Cette classe est immutable en Java. Cela signifie que tu ne peux pas modifier l’objet String lui-même ; mais tu peux modifier la référence à un objet.
Combien d’objets sont créés dans le code suivant ?
Il s’agit d’une question technique d’entretien Java qui peut remplacer la n°4 ci-dessus.
String s1=”Hello”;
String s2=”Hello”;
String s3=”Hello”;
La réponse est « un seul », car Java a un pool de String. Lorsque nous créons un objet String à l’aide de l’opérateur new(), Java crée un nouvel objet dans la mémoire du tas. Si nous utilisons la syntaxe littérale de String, comme dans notre exemple ci-dessus, la classe peut renvoyer un objet du pool de String, si celui-ci existe déjà.
Combien d’objets sont créés dans le code suivant ?
String s = new String(“Hello”);
Il y a 2 objets créés ici. Un dans le pool de constantes String et l’autre dans le tas.
Quelle est la différence entre les classes String, StringBuilder et StringBuffer en Java ?
Tout d’abord, String est une classe immuable. Cela signifie que tu ne peux pas modifier son contenu après création. Mais StringBuffer et StringBuilder sont des classes mutables, et tu peux donc les modifier plus tard. Si nous essayons de modifier le contenu d’un objet String la JVM crée une nouvelle chaîne, laissant celle d’origine non modifiée.
StringBuilder plus performant que StringBuffer, StringBuffer plus pertinent dans un contexte multi thread car gère la synchro
Y a-t-il une différence entre un objet String créé sous forme littérale et un créé avec l’opérateur new() ?
Il y en a une. Si nous créons un objet String avec l’opérateur new(), il apparaît dans le tas et n’est pas ajouté au pool de String. Si nous créons un objet String sous forme littérale, il est créé dans le pool de string, qui existe dans la zone PermGen du tas.
Peut-on remplacer une méthodeprivateoustaticen Java ?
Tu ne peux pas réellement remplacer une méthode private ou static en Java.
Tu ne peux pas remplacer les méthodes private, car l’étendue du spécificateur d’accès private est limitée à l’intérieur de la classe. Pour remplacer quelque chose, nous avons besoin d’avoir une classe parent et une classe enfant. Si la méthode d’une superclasse est private, alors une classe d’enfant ne peut pas l’utiliser, et les méthodes de la classe enfant seront traitées comme de nouvelles méthodes (et non comme des remplacements).
Les méthodes Static ne peuvent pas non plus être remplacées, car les méthodes static font partie de la classe elle-même. Elles ne font partie d’aucun objet de la classe. Bien sûr, tu peux déclarer la même méthode static avec la même signature dans les classes enfant, mais encore une fois, elles seront traitées comme de nouvelles méthodes.
Quelle est la différence entre une classe Abstract Class et une Interface ?
En Java, une interface définit un comportement tandis qu’une abstract class crée une hiérarchie.
Classe abstraite Interface
Il est possible d’avoir un corps de méthode (méthodes non abstraites) dans une classe abstraite.
Une interface peut seulement avoir des méthodes abstraites.
Dans Java 8 et les versions ultérieures, il est devenu possible de définir des méthodes par défaut et de les implémenter directement dans une interface.
les interfaces peuvent avoir des méthodes static depuis Java 8.
Des variables d’instance peuvent se trouver dans une classe abstraite .
Une interface ne peut pas avoir de variables d’instance.
Les constructeurs sont autorisés dans une classe abstraite. Une interface ne peut pas avoir de constructeur.
Une classe ne peut avoir qu’un seul parent abstrait. Une classe peut implémenter plusieurs interfaces.
Une classe abstraite peut fournir l’implémentation de l’interface.
Une interface ne peut pas fournir l’implémentation d’une classe abstraite.
Une classe abstraite peut étendre une autre classe Java et implémenter plusieurs interfaces Java.
Une interface est uniquement autorisée à étendre une autre interface Java.
Une classe Java abstraite peut avoir des membres de classe private et protected.
Les membres d’une interface Java sont public par défaut
Quels types de zones de mémoire sont alloués par la JVM ?
Le stockage des données dans la JVM est opéré dans différentes zones réparties en deux grandes catégories :
Les zones de mémoire dont la durée de vie est égale à celle de la JVM : elles sont créées au lancement de la JVM et sont détruites à son arrêt
Les zones de mémoire liées à un thread dont la durée de vie est égale à celle du thread concerné
Plusieurs zones de mémoire sont utilisées par la JVM :
les registres (register) : ces zones de mémoires sont utilisées par la JVM exclusivement lors de l’exécution des instructions du byte code.
une ou plusieurs piles (stack)
un tas (heap)
une zone de méthodes (method area)
Pourquoi l’héritage multiple n’est-il pas autorisé en Java ?
Ce serait vraiment compliqué. Imagine trois classesA,BetC, oùChériterait deAet deB. Supposons maintenant que les classesAetBont la même méthode et que tu l’appelles à partir d’un objet de la classe enfant… Quelle méthode sera appelée ? Celle de la classeAou celle de la classeB? Nous avons ici une ambiguïté.
Si tu essaies d’hériter de deux classes, Java générera une erreur au moment de la compilation.
Peut-on surcharger la méthode main() ?
Bien sûr, nous pouvons avoir de nombreuses méthodes main dans un programme Java en utilisant la surcharge de méthode.
Peut-on déclarer un constructeur comme final ?
Non. Un constructeur ne peut pas être déclaré comme final, car il ne peut pas être hérité. Il ne serait donc pas logique de déclarer un constructeur comme final. Toutefois, si tu essaies quand même, le compilateur Java te renverra une erreur.
Peut-on déclarer une interface commefinal?
Non, nous ne pouvons pas faire ça. Une interface ne peut pas être final, car elle doit être implémentée par une certaine classe sur la base de sa définition. Par conséquent, il ne serait pas logique de déclarer une interface comme final. Toutefois, si tu essaies de le faire, le compilateur Java te renverra une erreur.