Boa tarde, pessoal.
Gostaria de saber se tem como eu declarar e instanciar um vetor de Strings ou de algum objeto qualquer de um modo mais enxuto do que o demonstrado no código abaixo.
String[] vetor = new String[10];
/// É realmente necessário eu usar este "for" abaixo para instanciar as Strings?
for(int i=0; i<vetor.length; i++)
{
vetor[i] = new String();
}
Nao precisa instancialas, ate porque voce ja faz isso nessa linha:
String[]vetor=newString[10];
Apos essa linha voce pode adicionar valores normalmente ao vetor.
R
robgeek
rof20004:
Nao precisa instancialas, ate porque voce ja faz isso nessa linha:
String[] vetor = new String[10];
Apos essa linha voce pode adicionar valores normalmente ao vetor.
Mas cara, por exemplo, eu tenho uma classe igual a que está abaixo, só que no exemplo abaixo não coloquei os outos métodos por que não há necessidade.
E a mensagem de erro é:
java.lang.NullPointerException
publicclassNumero{intval;floatacum;publicNumero(intval,floatacum){this.val=val;this.acum=acum;}}// Se eu tentar, no método "main" ou em outro método fazer como no trecho abaixo, dá erro.Numerovetor[]=newNumero[2];vetor[0].val=1;vetor[0].val=1.0;// Para funcionar eu tenho que fazer como está abaixo:Numerovetor[]=newNumero[2];vetor[0]=newNumero();// Tenho que instanciar um objeto Numero na posição 0 do vetor.vetor[0].val=1;vetor[0].val=1.0;
R
rof20004
A diferenca é que voce esta instanciando a sua propria classe, e nao um tipo primitivo, como é a classe String.
R
robgeek
Então, quando eu for instanciar um vetor de objetos que eu criei, devo fazer usando algum loop, tipo o “for”?
E se for um vetor de outro tipo de objeto, como String ou outra classe, desde que eu não tenha criado, não há necessidade disso?
Se sim, é estranho, mas OK.
Obrigado.
R
rof20004
Entao mano, nao sei te explicar profundamente, o que sei é que a classe String, ao voce chamar ou atribuir qualquer valor, ela implicitamente ja faz um cast ou chamada ao construtor.
R
rof20004
Exemplo:
String nome = “Meu nome”;
Normalmente, um objeto precisaria do new ai para poder ser inicializado, mas veja que com a classe String isso nao é preciso, o que me faz pensar que isso é implicito na API, ou na JVM talvez.
R
robgeek
Ok, cara, obrigado pelas suas respostas, como isso ainda não me pareceu conclusivo, deixarei o tópico mais um tempo aqui, depois mudarei o título dele para [RESOLVIDO].
E
entanglement
Não sei por que é que se ensina arrays antes de ensinar listas.
Através do acompanhamento deste fórum, percebi que o conceito de array é muito mais difícil de os iniciantes em programação entenderem, que o conceito de listas. E a linguagem Java, ainda por cima, complica essa situação, ao insistir que os arrays têm tamanho fixo e dado no momento de sua criação.
Tanto é que em algumas linguagens, a lista é um tipo “primitivo” (no sentido que ele é primordial na linguagem) - como no caso do Lisp.
Ivan_Alves
robgeek:
rof20004:
Nao precisa instancialas, ate porque voce ja faz isso nessa linha:
String[] vetor = new String[10];
Apos essa linha voce pode adicionar valores normalmente ao vetor.
Mas cara, por exemplo, eu tenho uma classe igual a que está abaixo, só que no exemplo abaixo não coloquei os outos métodos por que não há necessidade.
E a mensagem de erro é:
java.lang.NullPointerException
publicclassNumero{intval;floatacum;publicNumero(intval,floatacum){this.val=val;this.acum=acum;}}// Se eu tentar, no método "main" ou em outro método fazer como no trecho abaixo, dá erro.Numerovetor[]=newNumero[2];vetor[0].val=1;vetor[0].val=1.0;// Para funcionar eu tenho que fazer como está abaixo:Numerovetor[]=newNumero[2];vetor[0]=newNumero();// Tenho que instanciar um objeto Numero na posição 0 do vetor.vetor[0].val=1;vetor[0].val=1.0;
robgeek ao tentar fazer isso
Numero vetor[] = new Numero[2];
vetor[0].val = 1;
Na primeira linha você não está instanciando os objetos do vetor e sim declarando seu tamanho, então o código geraria uma exceção de NullPointException ao passar pela segunda linha, simplismente porque você está tentando acessar um objeto que ainda não foi instanciado.
Então o certo seria declarar o objeto antes de acessar um método ou variável que ele possui, exemplo:
Numerovetor[]=newNumero[2]; //declara o tamanho do vetor.vetor[0]=newNumero(); //declara o objeto na posição 0 do vetorvetor[0].val=1; //agora você pode acessa-lo já que a referencia está apontando para um objeto criado acima
O mesmo acontece com a String que em Java não é um tipo primitivo.
R
rof20004
vero, String nao é tipo primitivo, so int float double byte short e outros ae, hehehe, desculpe ^^