Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Construtor | Classes
Java Avançado

bookConstrutor

Como Simplificar a Inicialização de Classes

Inicializar cada campo toda vez pode ser trabalhoso. Para esses casos, as classes possuem construtores. A sintaxe para um construtor é a seguinte:

Main.java

Main.java

copy
1234
modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }

Vamos analisar cada palavra escrita aqui:

  • modifier: Refere-se ao modificador de acesso, que geralmente é public para construtores. Situações em que um construtor pode ter um modificador de acesso diferente serão abordadas em um curso separado;
  • ClassName: É simplesmente o nome da classe na qual você está criando este construtor;
  • ParameterType: É o tipo do parâmetro que será utilizado no construtor. É importante prestar atenção aqui, pois esse parâmetro deve ser do mesmo tipo do campo na classe; Por exemplo: Se a classe possui dois parâmetros, String name e int age, então o construtor deve ter os mesmos parâmetros (caso queiramos inicializar todos os campos através do construtor). Se quisermos inicializar apenas um campo específico da classe pelo construtor, por exemplo, name, então devemos usar apenas um parâmetro com o mesmo tipo e nome do campo na classe;
  • Em seguida, dentro do corpo do construtor, atribuímos valores aos campos da classe utilizando os valores passados no parâmetro.

Palavra-chave "this"

Com a ajuda da palavra-chave this, é possível referenciar o campo da classe no qual escrevemos o valor dessa palavra-chave. Por exemplo, quando há uma classe com dois campos: name e age, podemos escrever this.name dentro do construtor ou método, e isso se referirá especificamente ao campo da classe, não à variável local passada como parâmetro para esse construtor ou método. Dessa forma, é possível inicializar os campos da classe por meio do construtor utilizando a sintaxe: this.name = name;.

Exemplo

Veja um exemplo de construtor em uma classe que auxilia na inicialização de todos os campos para tornar o conceito mais claro:

Person.java

Person.java

copy
1234567891011
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }

Existe uma classe chamada Person com três campos. Cada um desses campos foi adicionado ao construtor utilizando a palavra-chave this. Portanto, o construtor inicializa os campos com os valores dos parâmetros. Utilize esse construtor no método main para observar que os campos são inicializados com os valores passados como parâmetros:

Main.java

Main.java

copy
123456789101112131415161718192021
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }

Inicializamos o objeto Person chamado bob utilizando o construtor, passando name, age e gender como parâmetros. Em seguida, imprimimos seus parâmetros na tela e verificamos que o objeto possui os valores dos campos conforme especificado nos parâmetros do construtor.

Sobrecarga de Construtor

O construtor também pode ser sobrecarregado e não abranger a inicialização de todos os campos da classe. Por exemplo, se não quisermos especificar o gênero de Alice, podemos sobrecarregar o construtor para aceitar apenas 2 parâmetros e inicializar os campos com eles:

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }

Pode-se concluir que um construtor, assim como um método, pode ser sobrecarregado e aceitar diferentes quantidades e tipos de parâmetros.

Construtor Padrão

Um construtor padrão é um construtor que não recebe parâmetros e não inicializa nenhum campo. Ele existe em todas as classes por padrão se elas não possuírem outro tipo de construtor, por isso é chamado de construtor padrão. Toda vez que criamos um objeto de qualquer classe, utilizamos um construtor. Para utilizar o construtor padrão quando já existe um construtor que aceita parâmetros, também precisamos escrever um construtor vazio:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }

Utilizamos 3 construtores diferentes para inicializar cada um dos objetos Person. Como podemos ver no último exemplo, John não possui nome nem idade porque esses campos não foram inicializados para o objeto. Assim, podemos sobrecarregar o construtor quantas vezes forem necessárias e criar objetos por meio dele.

1. Qual das seguintes afirmações sobre construtores é verdadeira?

2. Qual é o propósito de um construtor em Java?

3. Qual dos seguintes trechos de código demonstra a forma correta de criar um construtor parametrizado?

question mark

Qual das seguintes afirmações sobre construtores é verdadeira?

Select the correct answer

question mark

Qual é o propósito de um construtor em Java?

Select the correct answer

question mark

Qual dos seguintes trechos de código demonstra a forma correta de criar um construtor parametrizado?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 6

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you explain more about how constructor overloading works?

What happens if I don't define any constructor in my class?

Can you give more examples of using the "this" keyword in constructors?

Awesome!

Completion rate improved to 2.63

bookConstrutor

Deslize para mostrar o menu

Como Simplificar a Inicialização de Classes

Inicializar cada campo toda vez pode ser trabalhoso. Para esses casos, as classes possuem construtores. A sintaxe para um construtor é a seguinte:

Main.java

Main.java

copy
1234
modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }

Vamos analisar cada palavra escrita aqui:

  • modifier: Refere-se ao modificador de acesso, que geralmente é public para construtores. Situações em que um construtor pode ter um modificador de acesso diferente serão abordadas em um curso separado;
  • ClassName: É simplesmente o nome da classe na qual você está criando este construtor;
  • ParameterType: É o tipo do parâmetro que será utilizado no construtor. É importante prestar atenção aqui, pois esse parâmetro deve ser do mesmo tipo do campo na classe; Por exemplo: Se a classe possui dois parâmetros, String name e int age, então o construtor deve ter os mesmos parâmetros (caso queiramos inicializar todos os campos através do construtor). Se quisermos inicializar apenas um campo específico da classe pelo construtor, por exemplo, name, então devemos usar apenas um parâmetro com o mesmo tipo e nome do campo na classe;
  • Em seguida, dentro do corpo do construtor, atribuímos valores aos campos da classe utilizando os valores passados no parâmetro.

Palavra-chave "this"

Com a ajuda da palavra-chave this, é possível referenciar o campo da classe no qual escrevemos o valor dessa palavra-chave. Por exemplo, quando há uma classe com dois campos: name e age, podemos escrever this.name dentro do construtor ou método, e isso se referirá especificamente ao campo da classe, não à variável local passada como parâmetro para esse construtor ou método. Dessa forma, é possível inicializar os campos da classe por meio do construtor utilizando a sintaxe: this.name = name;.

Exemplo

Veja um exemplo de construtor em uma classe que auxilia na inicialização de todos os campos para tornar o conceito mais claro:

Person.java

Person.java

copy
1234567891011
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }

Existe uma classe chamada Person com três campos. Cada um desses campos foi adicionado ao construtor utilizando a palavra-chave this. Portanto, o construtor inicializa os campos com os valores dos parâmetros. Utilize esse construtor no método main para observar que os campos são inicializados com os valores passados como parâmetros:

Main.java

Main.java

copy
123456789101112131415161718192021
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }

Inicializamos o objeto Person chamado bob utilizando o construtor, passando name, age e gender como parâmetros. Em seguida, imprimimos seus parâmetros na tela e verificamos que o objeto possui os valores dos campos conforme especificado nos parâmetros do construtor.

Sobrecarga de Construtor

O construtor também pode ser sobrecarregado e não abranger a inicialização de todos os campos da classe. Por exemplo, se não quisermos especificar o gênero de Alice, podemos sobrecarregar o construtor para aceitar apenas 2 parâmetros e inicializar os campos com eles:

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }

Pode-se concluir que um construtor, assim como um método, pode ser sobrecarregado e aceitar diferentes quantidades e tipos de parâmetros.

Construtor Padrão

Um construtor padrão é um construtor que não recebe parâmetros e não inicializa nenhum campo. Ele existe em todas as classes por padrão se elas não possuírem outro tipo de construtor, por isso é chamado de construtor padrão. Toda vez que criamos um objeto de qualquer classe, utilizamos um construtor. Para utilizar o construtor padrão quando já existe um construtor que aceita parâmetros, também precisamos escrever um construtor vazio:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }

Utilizamos 3 construtores diferentes para inicializar cada um dos objetos Person. Como podemos ver no último exemplo, John não possui nome nem idade porque esses campos não foram inicializados para o objeto. Assim, podemos sobrecarregar o construtor quantas vezes forem necessárias e criar objetos por meio dele.

1. Qual das seguintes afirmações sobre construtores é verdadeira?

2. Qual é o propósito de um construtor em Java?

3. Qual dos seguintes trechos de código demonstra a forma correta de criar um construtor parametrizado?

question mark

Qual das seguintes afirmações sobre construtores é verdadeira?

Select the correct answer

question mark

Qual é o propósito de um construtor em Java?

Select the correct answer

question mark

Qual dos seguintes trechos de código demonstra a forma correta de criar um construtor parametrizado?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 6
some-alt