Duvida a respeito do NEW

Ola amigos. Eu estou com uma duvida a respeito apenas na linha de um programa meu. Gostaria que voces me tirassem a duvida a respeito da teoria. Vou postar a matade do codigo.
Eu começei a aprender um pouco de Jframe de Jpanel.

public class Aplicativo2 extends javax.swing.JFrame {
    Entrar e;  //O uso do e seria um Objeto aqui ou não seria?
    Mostrar m;
    Dados d;

    /** Creates new form Aplicativo2 */
    public Aplicativo2() {
        e= new Entrar();   // Aqui está duvida. O uso do new seria a mesma coisa se eu usasse  assm por exemplo. Entrar e = new Entrar()?
        m = new Mostrar();

Não…

vc usando

e = new Entrar();

vc está atribuindo o valor ao atriubo da classe Aplicativo2…

se fizer

Entrar e = new Entrar();

vc está atribuindo a uma variavel local… que só existe dentro do método construtor…

Sim e não, como vc ja declarou a variavel “e” no começo então vc so adiciona uma instancia do objeto denro do metodo Aplicativo2(), mas se vc não tivesse declarado a variavel no inicio ai sim vc teria que declarar antes de usar fazendo Entra e = new Entra()
Claro que ha muitas coisas a se analizar tipo o escopo da variavel, se vc declara dentro do metodo ela so seria visivel pelo proprio método, mas se voce declarar no corpo da classe ela ja seria uma variavel de instancia. Espero não ter complicado.

Lembre-se que uma coisa é declarar a variável:

Entra e;

E outra coisa é instanciá-la:

e = new Entra();

As duas coisas podem ser feitas de uma só vez:

Entra e = new Entra();

Mas no seu caso a linha acima, se colocada no construtor, não é a mesma coisa por causa do escopo da variável (em lugares ela pode ser acessada). Veja:

public class A {
    private Entra e; // aqui a variável tem escopo de classe
    public A() {
        e = new Entra();
    }
}

Um equivalente ao código acima seria:

public class A {
    private Entra e = new Entra(); // também tem escopo de classe
}

Diferentemente de:

public class A {
    public A() {
        Entra e = new Entra(); // essa variável só é visível no construtor
    }
}

[quote=halm]Ola amigos. Eu estou com uma duvida a respeito apenas na linha de um programa meu. Gostaria que voces me tirassem a duvida a respeito da teoria. Vou postar a matade do codigo.
Eu começei a aprender um pouco de Jframe de Jpanel.

[code]
public class Aplicativo2 extends javax.swing.JFrame {
Entrar e; //O uso do e seria um Objeto aqui ou não seria?
Mostrar m;
Dados d;

/** Creates new form Aplicativo2 */
public Aplicativo2() {
    e= new Entrar();   // Aqui está duvida. O uso do new seria a mesma coisa se eu usasse  assm por exemplo. Entrar e = new Entrar()?
    m = new Mostrar();

[/code][/quote]

No teu caso, se você instanciasse os teus atributos lá em cima ou aqui dentro do construtor, dá na mesma.

public class Aplicativo2 extends javax.swing.JFrame {
    Entrar e = new Entrar();
    Mostrar m = new Mostrar();
    Dados d;

    public Aplicativo2() {
    }

Agora se tivesse que passar algum parâmetro para dentro do construtor baseado no que foi chamado, aí sim só pode colocar dentro do construtor;

public class Aplicativo2 extends javax.swing.JFrame {
    Entrar e;
    Mostrar m = new Mostrar();
    Dados d;

    public Aplicativo2(ModoDeEntrar modo) {
        e= new Entrar(modo);
     }

Na verdade, pelo que entendi da dúvida original, ele quer saber se o funcionamento do operador new é o mesmo independente da sintaxe.

E a resposta é sim.

Veja 3 modos diferente de se utilizar o new:

Entrar e; e = new Entrar(); // neste caso você declara a variável e numa instrução, e depois em outra instrução faz com que ela "aponte" para um objeto real no heap.
Entrar e = new Entrar(); //neste caso você está declarando a variável de referência "e", e fazendo com que ela "aponte" para um objeto na mesma instrução.
new Entrar(); // neste caso você simplesmente criou um objeto no heap, e não criou nenhuma variável de referência para este objeto.

Isto responde a dúvida referente ao operador new. O que é diferente de uma outra dúvida que talvez também exista referente ao escopo da variável.

Até.

[quote=rod.attack]Na verdade, pelo que entendi da dúvida original, ele quer saber se o funcionamento do operador new é o mesmo independente da sintaxe.

E a resposta é sim.

Veja 3 modos diferente de se utilizar o new:

Entrar e; e = new Entrar(); // neste caso você declara a variável e numa instrução, e depois em outra instrução faz com que ela "aponte" para um objeto real no heap.
Entrar e = new Entrar(); //neste caso você está declarando a variável de referência "e", e fazendo com que ela "aponte" para um objeto na mesma instrução.
new Entrar(); // neste caso você simplesmente criou um objeto no heap, e não criou nenhuma variável de referência para este objeto.

Isto responde a dúvida referente ao operador new. O que é diferente de uma outra dúvida que talvez também exista referente ao escopo da variável.

Até.

[/quote]
Cara do static

Se você não entendeu a pergunta, se atenha a não responder ao invés de ficar mostrando seus conhecimentos sobre o operador new. Assim você poupa tempo seu, e do autor da pergunta.
Você afirma que sim. Logo deve saber a importância e implicações desta afirmação. Aliás, você poderia me indicar a fonte de onde extraiu esta informação?

Fonte: http://www.guj.com.br/posts/list/201867.java

[quote=rogelgarcia][quote=rod.attack]Na verdade, pelo que entendi da dúvida original, ele quer saber se o funcionamento do operador new é o mesmo independente da sintaxe.

E a resposta é sim.

Veja 3 modos diferente de se utilizar o new:

Entrar e; e = new Entrar(); // neste caso você declara a variável e numa instrução, e depois em outra instrução faz com que ela "aponte" para um objeto real no heap.
Entrar e = new Entrar(); //neste caso você está declarando a variável de referência "e", e fazendo com que ela "aponte" para um objeto na mesma instrução.
new Entrar(); // neste caso você simplesmente criou um objeto no heap, e não criou nenhuma variável de referência para este objeto.

Isto responde a dúvida referente ao operador new. O que é diferente de uma outra dúvida que talvez também exista referente ao escopo da variável.

Até.

[/quote]
Cara do static

Se você não entendeu a pergunta, se atenha a não responder ao invés de ficar mostrando seus conhecimentos sobre o operador new. Assim você poupa tempo seu, e do autor da pergunta.
Você afirma que ele sim. Logo deve saber a importância e implicações desta afirmação. Aliás, você poderia me indicar a fonte de onde extraiu esta informação?

Fonte: http://www.guj.com.br/posts/list/201867.java[/quote]

kkkkkkkkkkkkkkkkkkkk eu morro de rir ainda.

Amigos então pelo que eu entendi de varias respostas que voces deram ambas estão certas tanto a
Entrar e = new Entrar() quanto a e = new Entrar().
Só que no caso quando eu uso a primeira eu não preciso declarar o atributo e na segundo eu preciso declarar. Seria só a maneira de escrever? Estou certo?
Abraço

[quote=halm]Amigos então pelo que eu entendi de varias respostas que voces deram ambas estão certas tanto a
Entrar e = new Entrar() quanto a e = new Entrar().
Só que no caso quando eu uso a primeira eu não preciso declarar o atributo e na segundo eu preciso declarar. Seria só a maneira de escrever? Estou certo?
Abraço[/quote]

Voce esta confundindo. No primeiro exemplo vc declara o atributo sim. O atributo porem no momento em que vc declara vc ja atribui um objeto á ele, e na segunda vc declarou ele no escopo da classe e instaciou (atribuiu um objeto á ela) dentro do construtor, essa é a diferença.

O comportamento do programa muda também…

Em um… a sua classe Aplicativo2 terá um atributo… (e = new Entrar():wink:

No outro não … (Entrar e = new Entrar():wink:

Voce tem que saber… se quer apenas uma variável, local, que existe só dentro do método…

Ou quer um atributo da classe, que será acessível por todos os métodos

(voce deve precisar de um atributo)

Gente, é melhor darem uma resposta mais longa e explicando tudo separado, se eu não soubesse Java e lêsse isto, ficaria mais confuso ainda.

Ok, três conceitos:

Declaração de variáveis:

class Pessoa
{
  String nome; // variável atributo de instância, pode ser usado no objeto todo através de this.nome
  Date dataNascimento; // variável atributo de instância

  Pessoa (String nome, Date dataNascimento) // variável local, parâmetro do construtor, só pode ser utilizada dentro deste bloco de código
  {
    this.nome = nome;
    this.dataNascimento = dataNascimento;
  }

  int getIdade()
  {
     int idade; // variável local, declarada dentro de um método, só pode ser utilizada dentro deste bloco de código
     Date hoje = new Date(); // variável local, declarada dentro de um método
     idade = calcularNumeroDeAnos(dataNascimento, hoje);
     return idade;
  }

  // idade e hoje não existem mais depois que o método termina.
} 

O local onde uma variável pode ser usada/referida é chamado escopo da variável.

Declaração e atribuição:

// isto vale tanto para atributos quanto variáveis locais

Tipo nomeDaVariável; // declaração simples

String nome, sobrenome; // declaração de múltiplas variáveis com o mesmo tipo

nome = "José da Silva"; // atribuição de um valor à uma variável já declarada anteriormente

int respostaParaUniversoVidaETudoMais = 42; // declaração e atribuição ao mesmo tempo

Ordem de inicialização de uma instância (fonte: http://www.javafaq.nu/java-article921.html):

class A {
    String a1 = ABC.echo(" 1: a1");
    String a2 = ABC.echo(" 2: a2");
    public A() {ABC.echo(" 3: A()");}
}

class B extends A {
    String b1 = ABC.echo(" 4: b1");
    String b2;
    public B() { 
        ABC.echo(" 5: B()"); 
        b1 = ABC.echo(" 6: b1 reset"); 
        a2 = ABC.echo(" 7: a2 reset"); 
    }
}

class C extends B {
    String c1; 
    { c1 = ABC.echo(" 8: c1"); }
    String c2;
    String c3 = ABC.echo(" 9: c3");

    public C() { 
        ABC.echo("10: C()"); 
        c2 = ABC.echo("11: c2");
        b2 = ABC.echo("12: b2");
    }
}

public class ABC {
    static String echo(String arg) {
        System.out.println(arg);
        return arg;
    }

    public static void main(String[] args) { 
        new C(); 
    }
}

O código acima imprime o seguinte:
1: a1
2: a2
3: A()
4: b1
5: B()
6: b1 reset
7: a2 reset
8: c1
9: c3
10: C()
11: c2
12: b2

PS: Não falei de variáveis de classe, aquelas marcadas como static.

[quote=halm]Ola amigos. Eu estou com uma duvida a respeito apenas na linha de um programa meu. Gostaria que voces me tirassem a duvida a respeito da teoria. Vou postar a matade do codigo.
Eu começei a aprender um pouco de Jframe de Jpanel.

[code]
public class Aplicativo2 extends javax.swing.JFrame {
Entrar e; //O uso do e seria um Objeto aqui ou não seria?
Mostrar m;
Dados d;

/** Creates new form Aplicativo2 */
public Aplicativo2() {
    e= new Entrar();   // Aqui está duvida. O uso do new seria a mesma coisa se eu usasse  assm por exemplo. Entrar e = new Entrar()?
    m = new Mostrar();

[/code][/quote]

Pelo que eu entendi :

Dúvida 1 :
Entrar e; //O uso do e seria um Objeto aqui ou não seria?

Resposta1 : Não, neste momento, você declarou uma variável, que pode vir a apontar para algum lugar, PORÉM, vc apenas criou ela, ainda não apontou para lugar algum.

Dúvida 2 :
e= new Entrar(); // Aqui está duvida. O uso do new seria a mesma coisa se eu usasse assm por exemplo. Entrar e = new Entrar()?

Resposta 2 : Não. Se nesta linha você fizer : Entrar e = new Entrar(); , vc vai estar criando outra variável, igual aquela da Dúvida 1, porém, neste caso, a variável vai “viver” somente dentro deste método, ou seja, em qualquer lugar que você usar a variável “e”, fora do construtor : Aplicativo2(), você vai estar usando a variável da Dúvida 1. Dentro do construtor, se você declarar Entrar e= new Entrar(); vc vai usar este “e” que acabou de declarar, mas se vc usar da maneira como vc descreveu : e= new Entrar(); , vc vai estar usando a variável da Dúvida 1.

Dúvida 3 :
Amigos então pelo que eu entendi de varias respostas que voces deram ambas estão certas tanto a
Entrar e = new Entrar() quanto a e = new Entrar().
Só que no caso quando eu uso a primeira eu não preciso declarar o atributo e na segundo eu preciso declarar. Seria só a maneira de escrever? Estou certo?

Resposta 3 : Sim. As duas estão corretas, mas a forma como vc declara e onde vc declara suas variáveis, afeta o funcionamento do seu programa de forma absurda as vezes.

[quote=rogelgarcia]
Cara do static

Se você não entendeu a pergunta, se atenha a não responder ao invés de ficar mostrando seus conhecimentos sobre o operador new. Assim você poupa tempo seu, e do autor da pergunta.
Você afirma que sim. Logo deve saber a importância e implicações desta afirmação. Aliás, você poderia me indicar a fonte de onde extraiu esta informação?

Fonte: http://www.guj.com.br/posts/list/201867.java[/quote]
“Cara do static” kkkkkkkkkkkk
eitaaaaa…
vc nao perdoa 1 hein? nao vai esquecer tão cedo! AUHhUAuha