2010-12-15 24 views
14

¿Qué dos fragmentos de código crean e inicializan correctamente una matriz estática de elementos int ? (Elija dos.)matriz entera inicialización estática

A.

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 }; 

D.

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

Respuesta: A, B

aquí incluso D parece cierto, ¿alguien puede decirme por qué D es falso?

+1

Esto no es válido Scheme, Ruby, Python o código LISP. Formatee su código y especifique el idioma/marco que está utilizando. – leppie

+1

Puede que necesite cambiar el título para que realmente resuma la pregunta .. –

Respuesta

18

Las respuestas correctas son 1 y 2 (o A y B con su notación), y una solución correcta también serían:

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

Solución D no inicializar la matriz de forma automática, ya que la clase se pone cargado por el tiempo de ejecución. Simplemente define un método estático (init), al que debe llamar antes de usar el campo de matriz.

+0

gracias a la explicación floyd.ur suena perfecto. – user516108

+0

Su trabajo perfecciona –

6

D define un método estático para inicializar a pero en realidad no lo llama. Por lo tanto, a permanece sin inicializar a menos que alguien llame explícitamente al método init.

Como han señalado otras respuestas: D ni siquiera debería compilar porque intenta asignar un valor a la variable finala. Supongo que es una explicación mucho más correcta. Sin embargo, incluso si a no fuera final, D no funcionaría sin código adicional.

Supongo que el new int[3] en D es un error ortográfico? Los otros tres todo intento de crear una matriz de longitud 2.

+0

ya es realmente correcto. Encontré la respuesta. Scjp .ur la explicación es correcta. No importa los votos – user516108

3

D (4) es falsa, porque a) a es definitiva y no se puede asignar en init; b) no hay garantía de que se llamará init; c) init no establece el tercer elemento;

+2

¿Por qué en el mundo se votó negativamente? ? Esta respuesta es completamente correcta. –

+0

No soy el infractor, pero creo que no es del todo correcto.c) es incorrecto porque 'new int [3]' inicializa todos los elementos a cero por lo que puedo recordar. Corrígeme si estoy equivocado. –

+0

@Sergey no se equivoca, lo mencioné como comentario aparte, ya que creo (como se menciona en alguna parte) que 'new int [3];' debe ser 'int [2];'. La razón principal por la que D es falso es que 'a' es final. – khachik

1

para el fragmento C No puede dar dimensiones (Tamaño) al inicializar para el fragmento D debe inicializar la variable final. No se puede inicializar más tarde.

+0

gracias. Buena explicación – user516108

0

Las variables finales se deben inicializar antes de que finalice la llamada al constructor. Dado que "static void init()" es un método &, no se ejecutará antes del constructor, las variables finales no se inicializarán. Por lo tanto, es un error de tiempo de compilación.

Cuestiones relacionadas