Tengo una clase y en esa clase tengo esto:
//some code
private int[] data = new int[3];
//some code
Luego en mi constructor:
public Date(){
data[0] = 0;
data[1] = 0;
data[2] = 0;
}
Si hago esto, todo está bien. Los valores de datos predeterminados se inicializan, pero si en cambio hago esto:
public Date(){
int[] data = {0,0,0};
}
Dice:
Local variable hides a field
¿Por qué?
¿Cuál es la mejor manera de inicializar una matriz dentro del constructor?
data
después"//some code"
tiene un alcance de toda la clase. mientras que la variabledata
en el constructor tiene un alcance dentro del constructor. y una vez terminado el constructor, la variable será destruida. Y también ladata
variable dentro del constructor oculta la variable con el mismo nombre en la clase. Esto justifica el errorLocal variable hides a field
Respuestas:
private int[] data = new int[3];
Esto ya inicializa los elementos de su matriz a 0. No necesita repetir eso nuevamente en el constructor.
En su constructor debería ser:
data = new int[]{0, 0, 0};
fuente
data=new int[3]
en el constructor defualtDate()
?Puedes hacer:
public class Data { private int[] data; public Data() { data = new int[]{0, 0, 0}; } }
Que se inicializa
data
en el constructor, o:public class Data { private int[] data = new int[]{0, 0, 0}; public Data() { // data already initialised } }
Que se inicializa
data
antes de que se ejecute el código en el constructor.fuente
public Data() throws Error {
si seOutOfMemoryError
lanzará.Esto se debe a que, en el constructor, declaró una variable local con el mismo nombre que un atributo.
Para asignar una matriz de enteros en la que todos los elementos se inicializan a cero, escriba esto en el constructor:
data = new int[3];
Para asignar una matriz de enteros que tiene otros valores iniciales, coloque este código en el constructor:
int[] temp = {2, 3, 7}; data = temp;
o:
data = new int[] {2, 3, 7};
fuente
por qué no simplemente
public Date(){ data = new int[]{0,0,0}; }
la razón por la que obtuvo el error es porque
int[] data = ...
declara una nueva variable y oculta el campodata
sin embargo, debe tenerse en cuenta que el contenido de la matriz ya está inicializado en 0 (el valor predeterminado de
int
)fuente
en su constructor está creando otra matriz int:
public Date(){ int[] data = {0,0,0}; }
Prueba esto:
data = {0,0,0};
NOTA: Por cierto, NO es necesario que inicialice los elementos de su matriz si se declara como una variable de instancia. Las variables de instancia obtienen automáticamente sus valores predeterminados, que para una matriz de enteros, los valores predeterminados son todos ceros.
Si tenía una matriz declarada localmente, aunque necesitaría inicializar cada elemento.
fuente
La mejor forma es no escribir declaraciones de inicialización. Esto se debe a que si escribe
int a[]=new int[3]
entonces de forma predeterminada, en Java todos los valores de la matriza[0]
, es decir ,a[1]
ya[2]
se inicializan en0
! Con respecto a la variable local que oculta un campo, publique su código completo para que lleguemos a una conclusión.fuente