Isso aqui é o construtor da classe?

Estou estudando java utilizando swing para gerar as janelas. Me deparei com o seguinte código:

[code]import javax.swing.*;

public class PrimeiraJanela extends JFrame{

public PrimeiraJanela(){
super(“Nossa primeira janela”);
setSize(300, 150);
setVisible(true);
}

public static void main(String args[]){
PrimeiraJanela app = new PrimeiraJanela();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}
[/code]

Lá no “main” eu atribuo a “app” uma nova referência a um objeto da classe “PrimeiraJanela”, certo?

A “public PrimeiraJanela()” é executada nesse momento em que eu crio uma instância da classe “PrimeiraJanela”, certo?

Então para fazer um construtor eu tenho que criar uma rotina pública com o mesmo nome da classe? É essa a regra?

Grato pela ajuda!

Sim senhor, mas a diferença entre um método clássico e um construtor é que um construtor não tem um tipo de retorno (você pode até escrever algo como "public void PrimeiraJanela() " e isso compilar, mas não é um construtor, e sim um método cujo tipo de retorno é “void”.)

Oi,

Para ser construtor ele tem que ter o mesmo nome da classe, possuir o modificador public ou private, NÃO pode retornar nada, e pode possuir 0 ou mais parâmetros…

Por exemplo, a classe MinhaClasse pode ter os construtores:

private MinhaClasse(int param1, int param2, String param)
public MinhaClasse(double param1, …)

e por ai vai…

[quote=André Fonseca]Oi,

Para ser construtor ele tem que ter o mesmo nome da classe, possuir o modificador public ou private, NÃO pode retornar nada, e pode possuir 0 ou mais parâmetros…

Por exemplo, a classe MinhaClasse pode ter os construtores:

private MinhaClasse(int param1, int param2, String param)
public MinhaClasse(double param1, …)

e por ai vai…[/quote]

Para ser construtor ele também pode não possuir modificador e ter o modificador protected tb… desde que siga as outras regras que você mencionou :wink:

obrigado a todos pelas respostas.

t+!

o construtor já está feito, é o:

public PrimeiraJanela(){

super(“Nossa primeira janela”);

setSize(300, 150);

setVisible(true);

}

é verdade, vc pode ter qualquer modificador de tipo em um construtor: private, public, protected ou default (package = sem modificador)

outras coisas que vi no head first da kathy: (pode ajudar alguem que for prestar certificação pra programmer)

[list]Se você não declarar explicitamente um construtor o compilador irá criar um default sem parâmetros[/list]

[list]Se você declarar explicitamente um construtor o construtor no-arg não será criado, ou seja, se na minha classe Banana eu declarar Banana(int param) o construtor Banana() NÃO será criado[/list]

[list]Todo construtor deve ter na primeira linha uma chamada para o construtor default this() ou para o construtor da super-classe super()[/list]

[list]Se você não colocar nada o compilador irá automaticamente colocar uma chamada para o construtor da super-classe usando super() - construtor no-arg da super-classe[/list]

[list]Você pode declarar o seu próprio construtor no-arg[/list]

[list]Você não pode chamar um método ou acessar uma variável de instância até que o construtor da super-classe seja executado[/list]

[list]Você pode acessar variáveis estáticas e métodos como parte da chamada do this() ou super(). Por exemplo: super(Animal.fazAlgumaCoisa())[/list]

[list]Classes abstratas possuem construtores e esses são sempre chamados quando a subclasse que as implementa é instanciada[/list]

[list]Interfaces NÃO tem construtores, elas não fazem parte da herança, ou seja, classes de heranças diferentes podem implementar a mesma interface[/list]

[list]Um construtor só pode ser invocado dentro de outro construtor, é ilegal fazer o seguinte:[/list]

classe Cavalo { Cavalo(); // construtor void fazAlgo() { Cavalo(); // chamando o construtor dentro do método } }