Java SE Flashcards Preview

My Programming Class > Java SE > Flashcards

Flashcards in Java SE Deck (104)
Loading flashcards...
1
Q

Quand a été élaboré Java?

A

Première version au début des années 90

2
Q

Quelle est la différence entre un langage compilé et un langage interprété?

Dans quelle catégorie se situe JAVA?

A

La différence porte sur la manière dont on va passer du code source (écrit par le développeur) à un code machine qui seul sera compris du processeur.

Avec un langage interprété, il faut un interpréteur qui va traduire en temps réel et en même temps que l’exécution le code source en code machine.

Le langage compilé lui est traduit une fois pour toute par le compilateur en un fichier autonome exécutable.

En JAVA, les choses se passent en 2 temps:
1/ Le code source est d’abord compilé par le compilateur en byte code. Même si ce bytecode est proche du code machine, il n’est pas exécutable directement.
2/ Il faut le traduire en code machine. C’est la Java Virtual Machine (JVM) qui s’en charge. Elle peut le faire soit par interprétation, soit par compilation (avec le compiler Just in Time)

3
Q

Comment s’appele le compilateur Java?

A

javac

4
Q

Quel est le format d’un fichier Java compilé et quelle est son extension?

A

Le code source (extension .java) est compilé en byte code (extension .class)

5
Q

En Java, les affectations de données à une variable on-t-elle lieu par valeur ou par référence?

A

Valeur pour les variable de type primitifs, référence pour les objets. Mais attention: Java doesn’t pass method arguments by reference; it passes them by value.

6
Q

Les arguments sont-ils passés à une méthode par valeur ou référence?

A

La règle générale de Java est que les arguments sont passés par valeur. Cela signifie que l’appel de méthode se fait par copie des valeurs passées en argument et que chaque appel de méthode dispose de sa propre version des paramètres. Cela vaut de la même manière pour un argument de type primitif ou un objet.

Si une méthode f possède un argument int x, alors l’appel f(2) revient à créer, pour la durée de l’exécution de cet appel une nouvelle variable (de nom x) qui est initialisée à 2.

Si une méthode g possède un argument MyObject x, alors l’appel g(instanceDeMyObject) revient à créer, pour la durée de l’exécution de cet appel une nouvelle variable qui a pour valeur la référence de l’objet vers lequel pointe instanceDeMyObject. La méthode va donc manipuler une copie de la référence.

https://www.javaworld.com/article/2077424/learn-java-does-java-pass-by-reference-or-pass-by-value.html

7
Q

Les variables locales peuvent-elle être initialisées par défaut?

A

Non, ce n’est le cas que pour les champs d’un objet.

8
Q

Que fait la méthode equal()?

A

Cette méthode de la classe objet se contente de comparer les adresses de 2 objets. Elle renvoie donc “true” si les 2 objets ont la même adresse. Bien sûr on peut redéfinir cette méthode pour que soient comparés les valeurs des objets (en général, c’est ce qui nous intéresse). La classe String a ainsi redéfini equal().

9
Q

Une classe dérivée a-t-elle accès aux membres privés de la sa classe de base?

A

Non. Pour cela il faudrait que les membres soient définis comme public ou protected.

10
Q

Une classe dérivée hérite-telle des constructeurs de la classe de base?

A

Non, mais le constructeur de la classe dérivée peut appeler le constructeur de la classe de base grâce au mot clé super.

11
Q

Une classe dérivée doit-elle avoir un constructeur?

A

Non, un constructeur sans argument de la classe de base sera alors appelé. Si cela n’est pas possible, il y aura une erreur de compilation.

12
Q

Quelle est la différence entre method overriding et method overloading?

A

Method overriding, c’est dans un contexte d’héritage, quand la classe dérivé redéfini le contenu de la classe mère.
Method overloading, c’est quand une méthode reprend le nom d’une méthode de sa classe ou de sa classe mère, mais avec d’autres paramètres.

13
Q

En programmation orientée objet, qu’est-ce que le polymorphisme?

A
Polymorphism is the ability of an object to take on many forms. The most common use of polymorphism in OOP occurs when a parent class reference is used to refer to a child class object. 
Exemple: [ClasseParente c = new Classefille( ) ]
Ce concept très puissant permet de manipuler des objets dont on ne connait pas le type.
14
Q
Imaginons la situation suivante: 
class A {
public void f (float x){...}
}
class B extends A {
public void f (float x){...} // redéfinition de f de A
public void f (int x){...} // surdéfinition de f pour A et B
}
A a = new A();
B b = new B()
int n;

a = b; // maintenant on a une référence de type a qui pointe vers un objet de type B

Question: quelle méthode va être appelée dans l’appel suivant: a.f(n) ?

A

La méthode public void f (float x) de B va être appelée. En effet, dans ce cas de figure le Java procède ainsi:

1/ A la compilation: recherche au sein de la classe correspondant à la référence de l’objet (ici classe A) de la meilleure méthode compatible .

2/ A l’exécution: recherche d’une redéfinition de cette méthode dans la classe de l’objet référencé (ici classe B). Si rien n’est trouvé, le compilateur poursuit la recherche dans les classes supérieures jusqu’à éventuellement remonter à la classe de la référence de l’objet.

15
Q

Comment vérifier que l’objet myObject est une instance de la classe C?

A

Si c’est le cas, l’expression “myObject instanceOf C” retournera true.

16
Q

A quoi sert un constructeur? Est-il nécessaire d’avoir un constructeur pour chaque classe?

A

Un constructeur sert à initialiser un objet. Si la classe ne dispose pas de constructeur, alors le constructeur par défaut sera appelé au moment de l’instanciation.

17
Q

Peut-on toujours recourir au constructeur par défaut pour l’instanciation d’un objet?

A

Non, c’est possible uniquement si la classe ne contient pas de constructeur ou bien un constructeur sans argument

18
Q

Qu’est-ce que l’encapsulation des données?

A

L’encapsulation permet de contrôler l’accès aux données d’un objet. Afin que les champs d’un objet de puisse pas être modifiés depuis l’extérieur, il est fortement recommandé que ces champs soient définis comme “private”.

19
Q

Lorsqu’un objet est créé, trois processus d’initialisation sont chronologiquement exécutés. Quels sont ces processus?

A

1: initialisation par défaut, 2: initialisation explicite, 3: appel du constructeur

20
Q

Quelles sont les valeurs affectées par défaut aux champs d’un objet?

A

booléen: false

char: ‘0’
entier: 0
flottant: 0.f
objet: null

21
Q

Quelle sont les différents usages du mot-clé “final”?

A

Une classe “final”ne peut pas être dérivée, une méthode “final”ne peut pas être redéfinie, une variable ou un champ “final” ne peuvent prendre qu’une valeur qui, après affectation, ne peut plus être modifiée.

22
Q

Le champ d’un object peut-il être déclaré “final”?

A

Oui, mais il devra être initialisé; soit explicitement, soit au plus tard par un constructeur.

23
Q

Quelle est la différence entre une copie superficielle et une copie profonde d’un objet? (shallow vs. deep copy)

A

Il n’y a une différence que si l’objet copié contient des attributs de type objet.

Dans la copie superficielle, seule la référence à ces attributs de type objet est copiée. Imaginons un objet A qui contient un objet B. Soit A’ une copie superficielle (shallow copy) de A. On a au final 3 objets: A et A’ et B vers lequel poi te A et A’.

Si A’ avait été une deep copy, on aurait eu au final 4 objets A, A’, B et B’. C’est à dire qu’avec une copie profonde, les objets référencés en attributs sont également copiés.

24
Q

Qu’est-ce que le ramasse-miette (garbage collector) et à quoi sert-il?

A

Un objet qui n’est plus référencé devient candidat au ramasse-miette, c’est-à-dire que la JVM peut décider de la supprimer de la mémoire.

25
Q

En Java, qu’est-ce qui peut être static? Et qu’est-ce que cela veut dire?

A

Un attribut ou une méthode d’une classe peut être déclaré static, cela signifie qu’il est propre à la classe, et non aux objets instanciés.

26
Q

Qu’est-ce qu’un bloc d’initialisation statique? Quand s’en sert-on?

A

C’est un bloc, précédé du mot-clé “static”et qui permet d’initialiser un attribut statique dans les cas où cela ne peut pas être simplement fait avec une expression.

27
Q

Comment appeler un constructeur au sein d’un autre constructeur?

A

Grâce au mot-clé “this”, exemple:

public class Foo {
    private int x;
    public Foo() {
        this(1);
    }
    public Foo(int x) {
        this.x = x;
    }
}

To chain to a particular superclass constructor instead of one in the same class, use super instead of this. Note that you can only chain to one constructor, and it has to be the first statement in your constructor body.

28
Q

Quel est le sens principal du mot-clé “this”?

A

Il fait référence à l’instance courante

29
Q

Qu’est-ce qu’une classe interne et dans quels cas peut-il être intéressant d’y avoir recours?

A

Une classe est dite interne lorsque ça définition est située à l’intérieur de la définition d’une autre classe.
Le principal intérêt est que l’objet interne a accès aux membres - même privés - de l’objet externe lui ayant donné naissance, et inversement.

30
Q

Qu’est qu’une classe abstraite?

A

C’est une classe qui ne peut pas être instanciée.

31
Q

Quelles sont les différences entre une classe abstraite et une interface?

A

Une interface ne peut avoir que des méthodes abstraites.
Une interface ne peut avoir que des variables final et static.
Une classe ne peut hériter que d’une classe de base, en revance elle peut implémenter plusieurs interfaces.

32
Q

Quelle est la différence entre l’instruction “while”et “do…while”?

A

Avec “do…while” l’instruction est exécutée au moins une fois. Au niveau de la syntaxe: présence d’un point virgule après la condition.

33
Q

Quelle est la syntaxe de l’instruction for?

A

for (initialisation; condition; incrémentation) {
instructions
}

34
Q

A quoi servent les mots-clés “break”et “continue”?

A

Ils sont principalement utilisés dans des boucles. “Break” permet de sortir de la boucle, “continue” permet de passer à l’itération suivante.

35
Q

Quand plusieurs boucles sont imbriquées les uns dans les autres. Comment peut-on sortir d’une boucle de niveau supérieur?

A

Grâce au mot clé “break” associé à une étiquette (label) (voir page 98)

36
Q

Quel est le mot clé utilisé pour indiquer qu’une méthode ne retourne rien?

A

void

37
Q

Dans une méthode, que sont les arguments muets? Et les arguments effectifs?

A

Les arguments muets ne sont que identificateurs utilisés dans l’en-tête de la méthode. Les arguments effectifs sont ceux effectivement passés à la méthode.

38
Q

Est-il nécessaire que le type de l’argument effectif soit le même que celui de l’argument muet?

A

Non, on peut utiliser un autre type si celui peut faire l’objet d’une conversion légale

39
Q

Qu’est que la surdéfinition de méthode (method overloading)?

A

Method Overloading is a feature that allows a class to have more than one method having the same name, if their argument lists are different. It is similar to constructor overloading in Java, that allows a class to have more than one constructor having different argument lists.

40
Q

Peut-on avoir dans une classe deux méthodes dont l’en-tête respective ne differerait que par le type de retour attendu?

A

non

41
Q

Lors de l’appel d’une méthode surdéfinie, comment le compilateur choisit-il la méthode à utiliser?

A

Recherche de la meilleure des méthodes acceptables. (voir p.139)

42
Q

Une méthode peut-elle modifier la valeur d’un argument effectif de type primitif?

A

Non, car on ne passe à la méthode qu’une copie de la valeur de l’argument effectif

43
Q

Une méthode peut-elle modifier la valeur d’un argument effectif de type objet

A

Oui car on passe à la méthode une copie de la référence de l’objet.

44
Q

Qu’est-ce qu’une méthode récursive?

A

C’est une méthode qui comporte un appel à elle-même

45
Q

Qu’est-ce qu’une méthode abstraite?

A

Une méthode abstraite peut être inclue dans une classe astraite. La méthode abstraite ne comporte pas de corps. Elle doit être définie dans une classe dérivée.

46
Q

Peut-on modifier les valeurs d’un tableau en utilisant une boucle for…each?

A

Non! La boucle for… each ne peut être utilisée qu’en consultation! Il faudra donc utiliser un itérateur.

47
Q

Comment retourner la valeur de la taille d’un tableau t ?

A

t.length

48
Q

Dans un tableau multidimensionnel, est-ce que tous les tableaux inclus doivent avoir la même taille?

A

non

49
Q

Comment dupliquer un tableau?

A

On peut utiliser la méthode clone(), mais attention elle ne génére qu’une copie superficielle.

50
Q

Combien de types d’entiers existe-t-il dans Java

A

4: byte, short, int et long

51
Q

Donne une approximation de la valeur maximale de chaque type d’entier.

A

byte: 127; short: 32.767, int: environ 2 milliards, long: 9 milliards de milliards

52
Q

Sur combien d’octets est codé un int?

A

4

53
Q

Sur combien d’octets est codé un short?

A

2

54
Q

Sur combien d’octets est codé un long?

A

8

55
Q

Sur combien d’octets est codé un byte?

A

1

56
Q

Quel préfixe permet d’indiquer qu’un entier est noté sous sa forme hexadécimale?

A

Ox, par exemple Ox1A

57
Q

Le float: taille en octet et précision en chiffres significatifs?

A

4 octets, 7 chiffres significatifs

58
Q

Qu’est-ce qu’une collection?

A

Les collections sont des objets qui permettent de gérer des ensembles d’objets. Ces ensembles de données peuvent être définis avec plusieurs caractéristiques : la possibilité de gérer des doublons, de gérer un ordre de tri, etc. …

59
Q

Java Collections Framework propose quatre grandes familles de collections, chacune définie par une interface de base. Quelles sont-elles?

A

List : collection d’éléments ordonnés qui accepte les doublons

Set : collection d’éléments non ordonnés par défaut qui n’accepte pas les doublons

Map : collection sous la forme d’une association de paires clé/valeur

Queue et Deque : collections qui stockent des éléments dans un certain ordre avant qu’ils ne soient extraits pour traitement

Notons en outre que List, Set; Queue and Deque sont des interfaces qui extend l’interface COLLECTION
(l’interface MAP est à part)

60
Q

Que signifie le terme “thread safe” dans Java ?

A

Un thread, ou fil d’exécution, aussi parfois appelé “processus léger”, est l’endroit conceptuel où se déroule l’exécution des instructions.

De nombreux environnements, dont ceux proposés par la machine virtuelle Java, permettent d’exécuter des programmes où plusieurs threads s’exécutent “simultanément”. Lorsque l’exécution a lieu sur un ordinateur équipé de plusieurs processeurs et/ou plusieurs cœurs, l’exécution peut être réellement “simultanée” (on parle de parallélisme). Sur les autres systèmes, la simultanéité n’est qu’apparente: un des threads progresse dans son exécution pendant une courte période, puis il s’interrompt pour laisser la main à un autre thread, etc.

Lorsque plusieurs threads modifient “simultanément” une structure de données (une liste, par exemple), le comportement de l’application peut devenir très bizarre en apparence: on a l’impression que certains threads ne modifient pas certaines valeurs alors qu’ils le devraient, le contenu des structures de données devient incohérent (lorsqu’on lit ce contenu, on observe des situations “impossibles”), etc. Ces erreurs viennent du fait que chaque thread considère être le seul à travailler, alors qu’il interagit avec d’autres threads. Elles peuvent être très difficiles à diagnostiquer et à corriger.

Pour éviter ces problèmes, il faut prendre en compte le fait qu’un élément logiciel (par exemple, une classe) puisse être exécuté dans un environnement multi-threadé (c’est-à-dire, où plusieurs threads peuvent s’exécuter simultanément). Cela implique un travail dès la conception de l’élément. Les éléments conçus pour éviter ces problèmes sont dits thread safe.

Une manière simple (mais pas toujours très performante) d’éviter les problèmes liés à l’utilisation simultanée d’une mémoire est d’utiliser un verrou d’exclusion mutuelle, qui assure qu’à tout moment un seul thread accès à une ressource donnée. En Java, le mot-clef synchronized permet d’appliquer un tel verrou sur les ressources d’un objet lorsqu’une méthode est invoquée.

Exemple concret en Java: la classe ArrayList est très utilisée pour gérer des listes, mais elle n’est pas thread safe (la documentation indique this implementation is not synchronized). Au contraire, la classe Vector permet également de gérer des listes, et est thread safe.

En général, il est préférable d’utiliser une classe qui n’est pas thread safe, et de prendre des dispositions spéciales (qui diminuent souvent les performances) lorsque c’est nécessaire. En Java, il existe des mécanismes génériques qui transforment une classe quelconque en une classe thread safe.

61
Q

Cite au moins 2 implémentations de l’interface MAP

A

HashTable, HashMap, LinkedHashMap, TreeMap

62
Q

De quoi est composé Java Collections Framework

A

D’interfaces, de classes abstraites, de classe d’implémentation, et d’algorithme (pour trier, rechercher… etc)

63
Q

Comment parcourir une collection en Java?

A

On peut utiliser pour cela…

un Iterator:
Iterator it = collection.iterator() ;
while (it.hasNext()) {

String element = it.next() ;  // retourne un objet de type String
System.out.println(element) ; }

ou bien un for..each
for (String element : collection) {

System.out.println(element) ; }
64
Q

Pour parcourir une collection, comment choisir entre Iterator et ForEach ?

A

La syntaxe du for… each est plus légère, mais contrairement à l’itérateur, elle ne permet pas de modifier les éléments de la collection. On ne peut donc l’utiliser que en lecture

65
Q

Comment parcourir un tableau?

A

Avec une boucle for classique ou bien un for… each, mais attention, le for… each ne fonctionnz que en lecture !

66
Q

Peut-on utiliser directement un Iterator pour parcourir une Map?

A

Non, les iterators ne sont utilisables directement que pour les classes implémentant l’interface Collection. Or, Map n’implémente pas Collection.

67
Q

Que peut-on utiliser pour itérer une Map?

A

Il y a plusieurs techniques. Le plus simple depuis Java 8 est d’ utiliser un myMap.forEach(action) où action est exprimée sous forme d’une expression Lambda:

// Java code illustrating iteration 
// over map using forEach(action) method 

import java.util.Map;
import java.util.HashMap;

class IterationDemo  
{ 
    public static void main(String[] arg) 
    { 
        Map gfg = new HashMap(); 
    // enter name/url pair 

    gfg. put("GFG", "geeksforgeeks.org"); 
    gfg. put("Practice", "practice.geeksforgeeks.org"); 
    gfg. put("Code", "code.geeksforgeeks.org"); 
    gfg. put("Quiz", "quiz.geeksforgeeks.org"); 
        // forEach(action) method to iterate map 
        gfg.forEach((k,v) -> System.out.println("Key = "
                \+ k + ", Value = " + v)); 
    } 
}
68
Q

Quelle est la classe mère à toutes les exceptions? Quelles sont ses classes dérivées?

A

C’est la classe Throwable, qui dérive directement de la superclasse Objet.
De la classe Throwable dérive la classe Error qui représente des erreurs graves intervenues dans la JVM et sur lesquels l’utilisateur, comme le programmateur ont peu ou pas de prise. On peut les attraper mais c’est un anti pattern car on ne peut globalement rien faire pour les arranger, les attraper risque donc d’empêcher un problème très important de remonter.
De la classe Throwable dérive également la classe Exception, qui représente les erreurs moins grave qu’il convient d’attraper. On parle d’exceptions explicites ou en anglais de checked exceptions.
Enfin, la classe Exception possède une sous-classe RuntimeException qui peuvent ne pas être traitées. On parle d’exceptions implicites.

69
Q

Quelle est la différence entre exceptions implicites et exceptions explicites? (en anglais unchecked and checked)

A

En Java, toute exception est soit implicite soit exploite. Les exceptions explicites sont détectées à la compilation et doivent être traitées. Les exceptions implicites ne sont pas détectées à la compilation et le développeur peut choisir de les traiter ou non.

70
Q

Imaginons que l’on utilise dans une classe une méthode susceptible de générer une exception. En terme de code, comment gérer cette situation?

A

S’il s’agit d’une exception implicite, son traitement est possible mais pas nécessaire. En revanche s’il s’agit d’une exception explicite, celle-ci doit être traitée. Le traitement peut être local à la méthode qui a déclenché l’exception. Mais le plus souvent il est délégué à la méthode appelante. Dans ce cas, la méthode susceptible de déclencher une exception qu’elle ne traite pas localement doit mentionner son type dans une clause throws figurant dans son en-tête.

71
Q

Quelle est la différence entre les mots-clés throw et throws?

A

Le mot-clé throws peut figurer dans l’entête d’une méthode ou d’un constructeur. Il doit alors être suivi des exceptions que la méthode ou le constructeur peut déclencher et qui ne sont pas traitées localement.

Le mot-clé throw est quant à lui utilisé pour déclencher manuellement une exception. Il initialise un objet Exception et donc doit être suivi de new MyException, avec MyException qui dérive de la classe Exception.

72
Q

Qu’est-ce qu’une exception personnalisée?

A

Il est possible de créer une nouvelle classe d’exception. Elle devra obligatoirement hériter de la classe Exception.

73
Q

Comment est déclenchée une exception?

A

Certaines exceptions sont déclenchées automatiquement ( soit dès la compilation pour les exceptions explicites soit à l’exécution pour les exceptions implicites). Par exemple une division par 0 provoquera automatiquement une ArithmeticException lors de l’exécution du code. Mais il est également possible de déclencher manuellement une exception grâce à l’instruction throw (suivi de new + la classe d’exception à instancier).

74
Q

Que se passe-t-il quand une exception est déclenchée sans être interceptée?

A

Si l’exception n’est pas traitée, le programme s’arrête.

75
Q

Comment intercepter une exception?

A

Grâce à un gestionnaire d’exception try/ catch, avec dans le bloc try le code à tester et dans le bloc catch les instructions à exécuter si une exception est levée dans le bloc try.

76
Q

Que se passe-t-il quand une exception est déclenchée dans un bloc try?

A

Les instructions du bloc try sont exécutées jusqu’à l’instruction provoquant l’exception. Dès la levée de l’exception la JVM exécute le contenu du gestionnaire catch. Donc en cas d’exception, toutes les instructions qui se trouve dans le bloc try, après l’instruction qui a déclenchée l’exception sont ignorées.

77
Q

Un gestionnaire d’exception peut-il intercepter plusieurs exceptions?

A

Oui, pour cela il faut placer plusieurs bloc catch après le bloc try.
Dans un gestionnaire try…catch comprenant plusieurs clauses, la recherche de la clause catch contenant le traitement de la classe d’exception appropriée, s’effectue séquentiellement dans l’ordre d’écriture des lignes de code. On choisira donc, lorsqu’il y a une hiérarchie entre les exceptions à intercepter, de placer le code de leurs gestionnaires dans l’ordre inverse de la hiérarchie.

78
Q

Qu’est-ce que le bloc finally? Comment l’utilise-t-on?

A

Le bloc finally est faculatif. Il peut venir en complèment d’un bloc try. Ses instructions sont exécutées dans tous les cas, qu’une exception soit interceptée ou pas. Si le bloc try et suivi d’un bloc catch (c’est à dire en cas de traitement local de l’exception), la JVM va exécuter les instructions du bloc try jusqu’à ce que l’exception soit levée, puis ensuite se brancher au gestionnaire puis branchement au bloc finally. Mais si le traitement est délégué à la méthode appelante, on aura donc dans la méthode déclenchant l’erreur un bloc try suivi directement d’un bloc finally et l’ordre d’exécution sera le suivant: bloc try, bloc finally, bloc catch de la méthode appelante. On se sert essentiellement du bloc finally pour la gestion de ressource ( en général pour libérer des ressources allouées dans le try).

79
Q

Comment transmettre des informations relatives à l’exception au gestionnaire d’exception?

A

2 méthodes:

  • on peut prévoir des champs pour notre objet exception et ces champs peuvent être passés à un constructeur adéquat lors de l’initialisation de l’exception, par exemple … throw new MyExceptionValeurNegative(-9);
  • on peut aussi utiliser le constructeur de la super classe Exception qui prend un String en argument. Ce String peut ensuite être appelé avec la méthode getMessage(); pour cela il suffit au préalable de prévoir dans la classe MyExceptionValeurNegative un constructeur qui prend un String en argument et qui appelera le constructeur de la super classe Exception.
80
Q

Soit int a =4 et int b=5, que vaut l’expression (a>b?a:b) ?

A

5

81
Q

Soit byte b = 10; int n = 1000; que vaut b+=n?

A

Attention b+=n revient à b = (byte) (b+n), soit une conversion de int à byte. Or 1010 ne peut pas être contenu dans un byte! D’où un résultat accepté en compilation mais dénué de sens!

82
Q

Comment condenser l’affectation i = i * 6?

A

i*=6;

83
Q

Soit int i = 6; que vaut l’expression 1+ (++i)?

A

8, opérateur de préincrémentation!

84
Q

Soit int i = 6; que vaut l’expression 1+ (i++)?

A

7, opérateur de postincrémentation!

85
Q

Donne un exemple de conversion par affectation.

A

float f; int i = 3;

f = i; –> i est converti en float

86
Q

Quelle est la différence entre les opérateurs & et &&, | et || ?

A

Avec && ou || le second opérande n’est évalué que si nécessaire.

87
Q

Dans l’expression (a<b></b>

A

Dans l’expression (a<b></b>

88
Q

Qu’est-ce que la promotion numérique?

A

Elle concerne les données de type char, byte et short qui, dans une expression, sont directement convertis en int.

89
Q

Comment le compilateur va traiter une expression mixte?

A

Les opérateurs binaires ne sont définis que pour des opérandes ayant le même type parmi int, long, float ou double. En cas d’expression mixte, le compilateur doit donc procéder à des conversions implicites (conversion d’ajustement et promotions numériques).

90
Q

Que vaut l’expression 4.5f/0?, 4.5/0 et 4/0?

A

Infinity, infinity et erreur d’exécution

91
Q

Qu’est ce que le modulo? Comment est-il noté?

A

Il indique le reste de la division entière du premier opérande par le second et est noté %.

92
Q

En java, à quoi sert le mot clé FINAL associé à une variable?

A

Il permet de déclarer que la valeur d’une variable ne doit pas être modifiée durant l’exécution du programme.

93
Q

En java, les variables de type primitif sont-elles initialisées par défaut?

A

Les variables locales ne le sont pas, mais les champs des objets le sont!

94
Q

Java est-il un langage à typage statique ou dynamique?

A

Java est un langage où toute variable possède un et un seul type qui ne change jamais (on dit que Java est un langage à typage statique, contrairement à PHP (http://www.php.net) ou Python (http://www.python.org), par exemple, qui sont à typage dynamique).

95
Q

En programmation, qu’est-ce qu’un littéral?

A

Un littéral est une valeur explicite utilisée dans le code source d’un programme.

96
Q

Comment imposer à un littéral d’être de type double?

A

avec le suffixe D, par exemple 4D

97
Q

Comment imposer à un littéral d’être de type long?

A

avec le suffixe L, par exemple 4L

98
Q

Quelle est la notation hexadécimale d’un char et quelle est son intérêt?

A

\uxxx; cette notation permet de faire référence à un charactère qui n’est pas connu de l’environnement de développement.

99
Q

Comment est noté le saut de ligne?

A

\n

100
Q

Comment est notée la tabulation horizontale?

A

\t

101
Q

Sur combien d’octets et sous quel format est codé un char?

A

2 octets, code Unicode

102
Q

Comment imposer à un littéral d’être de type float?

A

avec le suffixe F par exemple 12.5F

103
Q

Quel est le format par défaut d’un nombre flottant?

A

double

104
Q

Comment s’appelle la constante qui fournit la valeur absolue maximale d’un float?

A

Float.MAX_VALUE