Declarar e instanciar em linhas separadas, qual a diferença?

Boa tarde, pessoal!

Gostaria de saber se existe alguma diferença entre essas duas formas de instanciar um objeto:Image face1 = new ImageIcon("src/img/001.png").getImage();ouImage face1; face1 = new ImageIcon("src/img/001.png").getImage();De onde vem minha dúvida? Bem, estive acompanhando uns tutoriais de criação de jogos e me deparei com a situação de que ao criar uma animação básica com dois frames (duas imagens) a animação para mim não aparece como deveria. Fica somente no segundo quadro da animação. Intrigado com esse fato comecei a fuçar o código tentando concertar e adicionei a linha 05 no trecho abaixo (reinstanciei o objeto com a mesma imagem) e isso resolveu o problema. // Carrega Imagens public void loadPics(){ bg = new ImageIcon("src/img/fundo.png").getImage(); Image face1 = new ImageIcon("src/img/001.png").getImage(); face1 = new ImageIcon("src/img/001.png").getImage(); Image face2 = new ImageIcon("src/img/002.png").getImage(); a = new Animation(); a.addScene(face1, 250); a.addScene(face2, 250); }Em seguida o refiz assim: // Carrega Imagens public void loadPics(){ bg = new ImageIcon("src/img/fundo.png").getImage(); Image face1; face1 = new ImageIcon("src/img/001.png").getImage(); Image face2 = new ImageIcon("src/img/002.png").getImage(); a = new Animation(); a.addScene(face1, 250); a.addScene(face2, 250); }
E a animação aconteceu corretamente.

Existe alguma explicação para o que aconteceu? Esta situação não aconteceu na máquina que rodava o tutorial, que estava em ambiente Windows e eu estou em ambiente Linux, esse pode ser um dos motivos?

Abraço!

Note que nas linhas 4 e 5 do primeiro exemplo você cria 2 objetos.


Image face1 = new ImageIcon("src/img/001.png").getImage();  
    face1 = new ImageIcon("src/img/001.png").getImage();  

Ate onde eu sei naum teria o porque disso, se voce criar em uma linha e instanciar na linha de baixo tem que ser a mesma coisa que voce criar e instancia na mesma linha que do meu ponto de vista estaria correto, a plataforma que vc esta rodando acho que naum influencia, quem sabe a versao do java pode ter a ver, mas naum tenho certeza e acho isso muito pouco provavel

Tem alguma coisa errada no código que nao sei o que é, mas acredito que o motivo é que o codigo original não é o mesmo que está publicado.
De qualquer forma voce descobriu um dos motivos de escrever em linhas separadas: As vezes é mais facil achar um erro e/ou debugar o código linha a linha, é um recurso que utilizo nos meus programas profissionalmente

[quote=renatogrosz]Tem alguma coisa errada no código que nao sei o que é, mas acredito que o motivo é que o codigo original não é o mesmo que está publicado.
De qualquer forma voce descobriu um dos motivos de escrever em linhas separadas: As vezes é mais facil achar um erro e/ou debugar o código linha a linha, é um recurso que utilizo nos meus programas profissionalmente[/quote]
Só por curiosidade, em que momento o problema estaria na declaração de uma variável?

Declarar e instanciar em linhas separadas ajuda na hora de debugar o programa, pois fica mais organizado. No seu código você declarou e instanciou na mesma linha, fazer isso em linhas separadas ficaria assim:

    Image face1;
    face1 = new ImageIcon("src/img/001.png").getImage();

[quote=lucaslzl]Declarar e instanciar em linhas separadas ajuda na hora de debugar o programa, pois fica mais organizado. No seu código você declarou e instanciou na mesma linha, fazer isso em linhas separadas ficaria assim:

[code]
Image face1;
face1 = new ImageIcon(“src/img/001.png”).getImage();

[/code][/quote]
Isso é exatamente o que ele fez.

[quote=lucaslzl]Declarar e instanciar em linhas separadas ajuda na hora de debugar o programa, pois fica mais organizado. No seu código você declarou e instanciou na mesma linha, fazer isso em linhas separadas ficaria assim:

[code]
Image face1;
face1 = new ImageIcon(“src/img/001.png”).getImage();

[/code][/quote]

Puff…na minha opinião é uma linha totalmente desnecessária, sem sentido e que poderia ser facilmente evitada.
Para debugar quando der um F6 (se estiver no Eclipse, por exemplo) o face1 vai estar nulo, o que isso ajuda na depuração ?

Esse tipo de tratamento, deve ser aplicado em casos em que precisamos deixar a variável fora de um bloco, como fazemos na leitura de arquivos, por exemplo.
Por exemplo:

InputStream is = null; try { //faz algo } catch(Exception e){ } finally { if (null != is) is.close(); }

Sim, faltou o try-catch do IOException o close, mas é um exemplo bobo apenas.