O que é um construtor em Java e como usá-lo?

O que é um construtor em Java e como usá-lo?

Na programação orientada a objetos, um construtor é uma função especial que você chama para criar um objeto. Os construtores têm vários recursos exclusivos que os permitem trabalhar.





Em Java, você nomeia um construtor de acordo com sua classe. Um construtor é um método, definido na classe a que se aplica. Os construtores Java podem usar sobrecarga para fornecer comportamento alternativo. Construtores em Java também podem fazer uso de herança para reutilizar código.





Por que você precisa de construtores?

Construtores são a base da programação orientada a objetos, e Java não é exceção. Este exemplo mostra como você pode definir uma classe Circle básica com uma propriedade de dados e um método:





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

Você pode então criar uma instância desta classe e interagir com ela:

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

Mas isso é menos conveniente e robusto do que poderia ser. É uma boa prática orientada a objetos encapsular dados, protegendo-os de acesso não autorizado:



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

Agora, o código de chamada pode usar o setRadius método e não precisa se preocupar com seus detalhes de implementação:

o que fazer se o telefone for hackeado
Circle c = new Circle();
c.setRadius(2);

Os construtores oferecem uma maneira ainda melhor de fornecer dados a um objeto ao criá-lo. Eles são frequentemente usados ​​para a inicialização de propriedades, como o raio aqui.





Exemplos de construtores simples

O construtor mais básico é aquele sem argumentos, que não faz nada:

public class Circle {
public Circle() {}
}

Veja também: Aprenda a criar classes em Java





Se você não definir um construtor, Java fornecerá um padrão que se comporta da mesma maneira.

Observe algumas coisas:

  1. O nome do construtor corresponde ao nome da classe.
  2. Este construtor usa o público modificador de acesso, então qualquer outro código pode chamá-lo.
  3. Um construtor não inclui um tipo de retorno. Ao contrário de outros métodos, os construtores não podem retornar um valor.

Os construtores normalmente realizam algum tipo de inicialização. Observe que o código acima não inicializa o valor de radius. Nesse caso, o idioma será automaticamente definido como zero. Esta classe espera que um usuário use setRadius () . Para usar um padrão mais útil do que 0, você pode atribuí-lo dentro do construtor:

public class Circle {
public Circle() { radius = 1; }
}

Os círculos criados com esta classe agora terão, pelo menos, uma área real! O chamador ainda pode usar setRadius () para fornecer um raio diferente de 1. Mas o construtor pode ser ainda mais amigável:

public class Circle {
public Circle(double r) { radius = r; }
}

Agora você pode criar círculos com um raio específico desde o nascimento:

como parar 100 janelas de uso de disco 10
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Este é um uso muito comum para construtores. Freqüentemente, você os usará para inicializar variáveis ​​para valores de parâmetro.

Sobrecarga do construtor

Você pode especificar mais de um construtor em uma definição de classe:

public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

Isso dá ao código de chamada uma escolha de como construir objetos:

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

Com um círculo um pouco mais complexo, você pode explorar construtores mais interessantes. Esta versão armazena sua posição:

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

Agora você pode criar um círculo sem argumentos, um único raio ou coordenadas xey ao longo do raio. Este é o mesmo tipo de sobrecarga que o Java suporta para qualquer método.

Encadeamento de Construtor

Que tal criar um Círculo baseado em outro? Isso nos daria a capacidade de copiar Círculos facilmente. Observe o seguinte bloco:

public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

Isso vai funcionar, mas repete algum código desnecessariamente. Uma vez que a classe Circle já tem um construtor que lida com as propriedades individuais, você pode chamá-lo em vez de usar o isto palavra-chave:

public Circle(Circle c) {
this(c.x, c.y, c.radius);
}

Esta é uma forma de encadeamento de construtor, chamando um construtor de outro. Ele usa menos código e ajuda a centralizar uma operação, em vez de duplicá-la.

Chamando o construtor pai

A outra forma de encadeamento de construtor ocorre quando um construtor chama um construtor de sua classe pai. Isso pode ser explícito ou implícito. Para chamar um construtor pai explicitamente, use o super palavra-chave:

super(x, y);

Imagine uma classe Shape atuando como pai do Círculo:

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

Ele lida com o posicionamento comum para todas as formas, pois essa é a funcionalidade que todos compartilham. Agora a classe Circle pode delegar tratamento de posição a seu pai:

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

A construção da superclasse é um aspecto muito importante da herança em Java . A linguagem o impõe por padrão, se você não chamar explicitamente super em seus construtores.

Modificadores de acesso em construtores

Os construtores podem incluir um modificador de acesso em sua assinatura. Como outros métodos, isso define quais tipos de chamador podem acessar o construtor:

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

Este é um exemplo mais complicado, então tome cuidado para entendê-lo:

  • A classe não é abstrata, portanto, é possível instanciá-la.
  • O construtor é privado, portanto, apenas essa classe pode criar uma nova instância.
  • Por meio de uma propriedade e método estáticos, a classe expõe uma instância única e exclusiva de si mesma aos chamadores.

Use construtores em Java para criar objetos

Construtores são vitais para a programação orientada a objetos. Eles permitem que você crie objetos, o que é essencial!

Em Java, os construtores se parecem com outros métodos e funcionam da mesma maneira. Você deve se lembrar das regras especiais sobre construtores padrão, sobrecarga e encadeamento de construtor. Se os construtores são novos para você, você pode querer ler sobre os outros conceitos básicos do Java que deve aprender ao começar.

Compartilhado Compartilhado Tweet O email 10 conceitos básicos de Java que você deve aprender ao começar

Esteja você escrevendo uma GUI, desenvolvendo software do lado do servidor ou um aplicativo móvel usando Android, aprender Java será muito útil. Aqui estão alguns conceitos básicos do Java para ajudá-lo a começar.

Leia a seguir
Tópicos relacionados
  • Programação
  • Java
  • Dicas de codificação
Sobre o autor Bobby Jack(58 artigos publicados)

Bobby é um entusiasta da tecnologia que trabalhou como desenvolvedor de software por quase duas décadas. Ele é apaixonado por jogos, trabalha como Editor de Críticas na Switch Player Magazine e está imerso em todos os aspectos da publicação online e desenvolvimento web.

como importar senhas para o Chrome
Mais de Bobby Jack

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Clique aqui para se inscrever