Dominando Construtores em Java: Tipos, Uso e Exemplos Práticos
Construtores em Java
Neste tutorial, aprenderemos sobre construtores Java, seus tipos e como usá-los com a ajuda de exemplos.
O que é um Construtor?
Um construtor em Java é similar a um método que é invocado quando um objeto da classe é criado.
Diferente de métodos Java, um construtor tem o mesmo nome da classe e não tem tipo de retorno. Por exemplo,
class Test {
Test() {
// corpo do construtor
}
}
Aqui, Test() é um construtor. Tem o mesmo nome da classe e não tem tipo de retorno.
Leitura Recomendada: Por que construtores não retornam valores
Exemplo 1: Construtor Java
class Main {
private String name;
// construtor
Main() {
System.out.println("Construtor Chamado:");
name = "Programiz";
}
public static void main(String[] args) {
// construtor é invocado ao
// criar um objeto da classe Main
Main obj = new Main();
System.out.println("O nome é " + obj.name);
}
}
Saída:
Construtor Chamado: O nome é Programiz
No exemplo acima, criamos um construtor chamado Main(). Dentro do construtor, estamos inicializando o valor da variável name.
Observe a instrução de criação de um objeto da classe Main.
Main obj = new Main();
Aqui, quando o objeto é criado, o construtor Main() é chamado. E o valor da variável name é inicializado.
Portanto, o programa imprime o valor da variável name como Programiz.
Tipos de Construtor
Em Java, construtores podem ser divididos em 3 tipos:
- Construtor Sem Argumentos
- Construtor Parametrizado
- Construtor Padrão
1. Construtores Sem Argumentos em Java
Similar a métodos, um construtor Java pode ou não ter parâmetros (argumentos).
Se um construtor não aceita parâmetros, é conhecido como construtor sem argumentos. Por exemplo,
private Construtor() {
// corpo do construtor
}
Exemplo 2: Construtor privado sem argumentos em Java
class Main {
int i;
// construtor sem parâmetro
private Main() {
i = 5;
System.out.println("Construtor é chamado");
}
public static void main(String[] args) {
// chamando construtor sem parâmetro
Main obj = new Main();
System.out.println("Valor de i: " + obj.i);
}
}
Saída:
Construtor é chamado Valor de i: 5
No exemplo acima, criamos um construtor Main(). Aqui, o construtor não aceita parâmetros. Portanto, é conhecido como construtor sem argumentos.
Observe que declaramos o construtor como private.
Uma vez que um construtor é declarado private, ele não pode ser acessado de fora da classe. Então, criar objetos de fora da classe é proibido usando construtor privado.
Aqui, estamos criando o objeto dentro da mesma classe. Portanto, o programa consegue acessar o construtor. Para saber mais, visite Java Implement Private Constructor.
No entanto, se quisermos criar objetos fora da classe, precisamos declarar o construtor como public.
Exemplo 3: Construtores públicos sem argumentos em Java
class Company {
String name;
// construtor público
public Company() {
name = "Programiz";
}
}
class Main {
public static void main(String[] args) {
// objeto criado em outra classe
Company obj = new Company();
System.out.println("Nome da empresa = " + obj.name);
}
}
Saída:
Nome da empresa = Programiz
Leitura Recomendada: Modificador de Acesso Java
2. Construtor Parametrizado em Java
Um construtor Java também pode aceitar um ou mais parâmetros. Tais construtores são conhecidos como construtores parametrizados (construtor com parâmetros).
Exemplo 4: Construtor parametrizado
class Main {
String languages;
// construtor aceitando valor único
Main(String lang) {
languages = lang;
System.out.println(languages + " Linguagem de Programação");
}
public static void main(String[] args) {
// chamar construtor passando valor único
Main obj1 = new Main("Java");
Main obj2 = new Main("Python");
Main obj3 = new Main("C");
}
}
Saída:
Java Linguagem de Programação Python Linguagem de Programação C Linguagem de Programação
No exemplo acima, criamos um construtor chamado Main(). Aqui, o construtor aceita um único parâmetro. Observe a expressão,
Main obj1 = new Main("Java");
Aqui, estamos passando o valor único para o construtor. Baseado no argumento passado, a variável language é inicializada dentro do construtor.
3. Construtor Padrão em Java
Se não criarmos nenhum construtor, o compilador Java cria automaticamente um construtor sem argumentos durante a execução do programa. Este construtor é chamado construtor padrão.
Exemplo 5: Construtor Padrão
class Main {
int a;
boolean b;
public static void main(String[] args) {
// Um construtor padrão é chamado
Main obj = new Main();
System.out.println("Valor Padrão:");
System.out.println("a = " + obj.a);
System.out.println("b = " + obj.b);
}
}
Saída:
a = 0 b = false
Aqui, não criamos nenhum construtor. Portanto, o compilador Java cria automaticamente o construtor padrão.
O construtor padrão inicializa quaisquer variáveis de instância não inicializadas com valores padrão.
| Tipo | Valor Padrão |
|---|---|
boolean | false |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
char | \u0000 |
float | 0.0f |
double | 0.0d |
object | Referência null |
No programa acima, as variáveis a e b são inicializadas com valor padrão 0 e false respectivamente.
O programa acima é equivalente a:
class Main {
int a;
boolean b;
// um construtor privado
private Main() {
a = 0;
b = false;
}
public static void main(String[] args) {
// chamar o construtor
Main obj = new Main();
System.out.println("Valor Padrão:");
System.out.println("a = " + obj.a);
System.out.println("b = " + obj.b);
}
}
A saída do programa é a mesma do Exemplo 5.
Notas Importantes sobre Construtores Java
- Construtores são invocados implicitamente quando você instancia objetos.
- As duas regras para criar um construtor são:
O nome do construtor deve ser o mesmo da classe.
Um construtor Java não deve ter tipo de retorno. - Se uma classe não tem construtor, o compilador Java cria automaticamente um construtor padrão em tempo de execução. O construtor padrão inicializa variáveis de instância com valores padrão. Por exemplo, variável
intserá inicializada com0 - Tipos de construtor:
Construtor Sem Argumentos - construtor que não aceita argumentos
Construtor Parametrizado - construtor que aceita argumentos
Construtor Padrão - construtor criado automaticamente pelo compilador Java se não definido explicitamente. - Um construtor não pode ser
abstract,staticoufinal. - Um construtor pode ser sobrecarregado mas não pode ser sobrescrito.
Sobrecarga de Construtores em Java
Similar à sobrecarga de métodos Java, também podemos criar dois ou mais construtores com parâmetros diferentes. Isso é chamado sobrecarga de construtores.
Exemplo 6: Sobrecarga de Construtor Java
class Main {
String language;
// construtor sem parâmetro
Main() {
this.language = "Java";
}
// construtor com parâmetro único
Main(String language) {
this.language = language;
}
public void getName() {
System.out.println("Linguagem de Programação: " + this.language);
}
public static void main(String[] args) {
// chamar construtor sem parâmetro
Main obj1 = new Main();
// chamar construtor com parâmetro único
Main obj2 = new Main("Python");
obj1.getName();
obj2.getName();
}
}
Saída:
Linguagem de Programação: Java Linguagem de Programação: Python
No exemplo acima, temos dois construtores: Main() e Main(String language). Aqui, ambos os construtores inicializam o valor da variável language com valores diferentes.
Baseado no parâmetro passado durante a criação do objeto, diferentes construtores são chamados e diferentes valores são atribuídos.
Também é possível chamar um construtor de outro construtor. Para saber mais, visite Java Call One Constructor from Another.
Nota: Usamos a palavra-chave this para especificar a variável da classe. Para saber mais sobre this, visite palavra-chave this Java.
Java
- Entendendo Construtores em C++: Padrão, Parametrizados e de Cópia Explicados
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Comentários em Java: Tipos, Uso e Boas Práticas
- Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
- Dominando Construtores em Java: Tipos, Uso e Exemplos Práticos
- Dominando Strings em Java: Criação, Métodos e Boas Práticas
- Palavra-chave this em Java: Usos Práticos, Construtores e Mais
- Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Construtores de Enum em Java Explicados com Exemplo Prático