Ele é parecido com um método, só que ele não possui nenhum tipo de retorno (nem mesmo a declaração void) e tem que ter o mesmo nome da classe. Ele pode ser declarado com qualquer modificador de acesso, até mesmo o private. Se ele tiver um construtor private significa dezer que apenas o código de dentro da classe irá ter acesso à ele, exemplo:
class Foo{
private Foo(){}
private Foo foo;
public static getInstance(){
if(foo == null) foo = new Foo();
return foo;
}
}
class Bar{
public Bar(){
this("Oi");
}
private Bar(String msg){
System.out.println(msg);
}
}
Se você não colocar um método construtor na sua classe o compilador irá colocar para você.
Outro fator importante é que você pode ter um método com o nome de um construtor, exemplo:
class Foo{
public Foo(){}
void Foo(){}
}
//main
new Foo().Foo();
//fim main
Nesse exemplo ele irá executar o construtor do objeto e logo em seguinda o método void Foo.
Sempre que você estabelecer uma relação de herença você tem que chamar no construtor o construtor da super classe, caso você não gere o compilador mais uma vez faz isso para você, exceto no caso do construtor da super exigir a passagem de algum parâmetro, exemplo:
class Foo(){
Foo(String msg){}
}
class Bar extends Foo(){
Bar(){
super("Oi");
}
}
Outro fater importante é saber quando usar o "this" e o "super". O "this" é usado quando um construtor que chamar outro construtor da classe, exemplo:
class Bar{
public Bar(){
this("Oi");
}
private Bar(String msg){
System.out.println(msg);
}
}
Já o super é utilizado quando uma subclasse chama o construtor da super, exemplo:
class Foo(){
Foo(String msg){}
}
class Bar extends Foo(){
Bar(){
super("Oi");
}
}
Por hoje é isso pessoal, até o próximo post.