Eu tenho uma aula e nessa aula eu tenho isso:
//some code
private int[] data = new int[3];
//some code
Então, no meu construtor:
public Date(){
data[0] = 0;
data[1] = 0;
data[2] = 0;
}
Se eu fizer isso, tudo ficará bem. Os valores de dados padrão são inicializados, mas se eu fizer isso:
public Date(){
int[] data = {0,0,0};
}
Diz:
Local variable hides a field
Por quê?
Qual é a melhor maneira de inicializar um array dentro do construtor?
data
depois de"//some code"
ter um escopo de toda a classe. enquanto a variáveldata
no construtor tem um escopo dentro do construtor. e assim que o construtor estiver pronto, a variável será destruída. E também adata
variável dentro do construtor oculta a variável com o mesmo nome na classe. Isso justifica o erroLocal variable hides a field
Respostas:
Isso já inicializa seus elementos de array para 0. Você não precisa repetir isso novamente no construtor.
Em seu construtor, deve ser:
fonte
data=new int[3]
no construtor padrãoDate()
?Você pode fazer:
Que inicializa
data
no construtor ou:Que inicializa
data
antes que o código no construtor seja executado.fonte
public Data() throws Error {
seOutOfMemoryError
ela for lançada.Isso ocorre porque, no construtor, você declarou uma variável local com o mesmo nome de um atributo.
Para alocar uma matriz inteira na qual todos os elementos são inicializados com zero, escreva no construtor:
Para alocar uma matriz inteira que possui outros valores iniciais, coloque este código no construtor:
ou:
fonte
porque não simplesmente
o motivo pelo qual você obteve o erro é porque
int[] data = ...
declara uma nova variável e oculta o campodata
no entanto, deve-se observar que o conteúdo da matriz já foi inicializado com 0 (o valor padrão de
int
)fonte
em seu construtor, você está criando outra matriz int:
Experimente isto:
NOTA: A propósito, você NÃO precisa inicializar os elementos do array se ele for declarado como uma variável de instância. Variáveis de instância obtêm automaticamente seus valores padrão, que para uma matriz de inteiros, os valores padrão são todos zeros.
Se você tivesse um array declarado localmente, porém, você precisaria inicializar cada elemento.
fonte
A melhor maneira é não escrever nenhuma instrução de inicialização. Isso ocorre porque se você escrever
int a[]=new int[3]
então, por padrão, em Java todos os valores de arraya[0]
, ou seja ,a[1]
ea[2]
são inicializados para0
! Com relação à variável local que esconde um campo, poste seu código inteiro para que possamos concluir.fonte