Mais uma pegadinha

Vejam essas duas definicoes de programas e digam o que sera impresso ao tentar executar cada uma:

PROGRAMA 1:

public class teste{
  public static void main(String[] args){
    teste instaciaTeste = new teste();
    System.out.println("FIM PROGRAMA 1");
}
  teste(){
    System.out.println("PROGRAMA1");
  }
}

PROGRAMA 2:

public class teste{
  public static void main(String[] args){
    teste instaciaTeste = new teste();
    System.out.println("FIM PROGRAMA 2");
}
  void teste(){
    System.out.println("PROGRAMA2");
  }
}

Eh isso galera falem ai o que acontecera se tentarmos compilar e rodar os programas… LOGICO um de cada vez pq os dois se chaman teste!!
Foi mais uma q me pegou…
:cry:

Abraços

Pra melhorar agora vai o programa 3

PROGRAMA 3:

public class teste{
  public static void main(String[] args){
    teste instaciaTeste = new teste();
    System.out.println("FIM PROGRAMA 1");
    instaciaTeste.teste();
}
  void teste(){
    System.out.println("PROGRAMA1");
  }
}

E ai vai compilar? Vai rodar?
acho q assim ficou bem claro o significado da palavrinha void na frente do construtor…
Abraços…
[/code]

No primeiro codigo vai imprimir

PROGRAMA2 FIM PROGRAMA 2

nos outros dois vai dar erro porque um constructor nao usa a keyword void, né?

PEACE!

Uhm…

Não, nesse caso esses “construtores” vão se interpretados como métodos.

[]'s

Bom, não sei se estou certo. Eu acho q imprime o seguinte:

Programa1:

PROGRAMA1 // chamado no constructor
FIM PROGRAMA 1 // chamado no println

Programa2:

FIM PROGRAMA 2
/*
Aqui acho q a string PROGRAMA 2 não é impressa pq a chamada à teste() é p/ construir a classe, e não é chamado como um método da classe. Porém o método da classe existe normalmente
*/

Programa3:

FIM PROGRAMA 1
PROGRAMA1

/* Aqui acho q primeiro é chamado o construtor teste(), depois impresso a primeira string, depois chamado o método da classe teste p/ imprimir outra string
*/

Na minha opinião compila e roda normal pois acho q o compilador distingue bem a diferença entre a chamada do método e do construtor. Não sei se estou certo, preciso testar ainda. Mas caso eu esteja errado peço que me corrijam

Tá certo! :smiley:
Lembem-se, entretanto, que o construtor teste() é o construtor implícito.
void teste() é um método como outro qualquer.

Pra aumentar a complexidade da pergunta:

public class teste{
  public static void main(String[] args){
    teste instaciaTeste = new teste();
    System.out.println("FIM PROGRAMA 4");
   instaciaTeste.teste(); 
}
  teste(){
    System.out.println("PROGRAMA4");
  }
} 

E essa:

public class teste{
  public static void main(String[] args){
    teste instaciaTeste = new teste();
    System.out.println("FIM PROGRAMA 5");
   instaciaTeste.teste(); 
}
  teste(){
    System.out.println("PROGRAMA5");
  }
 void teste(){
    System.out.println("PROGRAMA 5");
  }
} 

Qual seria o resultado ?

boa …
vo tentar sem compilar ae…
a primeira nem compila e a segunda vai ter saida:
PROGRAMA 5
FIM PROGRAMA 5
PROGRAMA5
agora vo lah compilar pra ver…
Hhehehe
Abraços

hehe acertei!!!
Tem umas questao pega rato… To juntando um monte e logo coloco um doc pra galera
Abraços

Na realidade a ordem é um pouco diferente:

PROGRAMA5
FIM PROGRAMA 5
PROGRAMA 5

Primeiro ele chama o construtor, depois exibe a mensagem
dentro do main e depois ele chama o método.