web-dev-qa-db-fra.com

initialisation statique de tableau entier

Quels sont les deux fragments de code qui créent et initialisent correctement un tableau statique d’int Éléments? (Choisissez deux.)

UNE.

static final int[] a = { 100,200 };

B. 

static final int[] a;
static { a=new int[2]; a[0]=100; a[1]=200; }

C.

static final int[] a = new int[2]{ 100,200 };

RÉ.

static final int[] a;
static void init() { a = new int[3]; a[0]=100; a[1]=200; }

Réponse: A, B

ici même D semble vrai, quelqu'un peut-il me dire pourquoi D est faux.

17
user516108

Les réponses correctes sont 1 et 2 (ou A et B avec votre notation), et une solution également correcte serait:

static final int[] a = new int[]{ 100,200 };

La solution D n'initialise pas automatiquement le tableau, car la classe est chargée par le moteur d'exécution. Il définit simplement une méthode statique (init), que vous devez appeler avant d'utiliser le champ array.

23
buc

D définit une méthode statique pour initialiser a mais ne l'appelle pas réellement. Ainsi, a reste non initialisé à moins que quelqu'un appelle explicitement la méthode init.

Comme d'autres réponses l'ont souligné: D ne devrait même pas compiler car il tente d'affecter une valeur à la variable finala. Je suppose que c'est une explication beaucoup plus correcte. Néanmoins, même si a n'était pas final, D ne fonctionnerait toujours pas sans code supplémentaire.

Je suppose que le new int[3] en D est une faute de frappe? Les trois autres essaient tous de créer un tableau de longueur 2.

6
Cameron Skinner

D (4) est faux car a)a EST FINAL ET VOUS NE POUVEZ PAS L'AFFECTER À init; b) rien ne garantit que init sera appelé; c) init ne définit pas le troisième élément;

3
khachik

pour l'extrait C Vous ne pouvez pas donner de dimensions (Taille) lors de l'initialisation pour l'extrait D, vous devez initialiser la variable finale. Il ne peut pas être initialisé plus tard.

1
Ratna Dinakar

les variables finales doivent être initialisées avant la fin de l'appel du constructeur. Puisque "static void init ()" est une méthode et qu'elle ne s'exécutera pas avant le constructeur, les variables finales ne seront pas initialisées. C'est donc une erreur de compilation.

0
Ajay Sharma