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
course content

Conteúdo do Curso

Java Avançado

Java Avançado

1. Estrutura Profunda do Java
2. Métodos
3. String Avançado
4. Classes
5. Classes Avançadas

book
Construtor

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; }

Análise de cada termo apresentado:

  • modifier: Refere-se ao modificador de acesso, que geralmente é public para construtores. Situações em que um construtor pode ter outro modificador de acesso serão abordadas em curso separado;
  • ClassName: Nome da classe na qual o construtor está sendo criado;
  • ParameterType: Tipo do parâmetro utilizado no construtor. É importante atentar-se, 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 seja necessário inicializar todos os campos pelo construtor). Caso seja necessário inicializar apenas um campo específico da classe pelo construtor, por exemplo, name, deve-se utilizar apenas um parâmetro com o mesmo tipo e nome do campo na classe;
  • Em seguida, dentro do corpo do construtor, os valores são atribuídos aos campos da classe utilizando os valores passados como 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 temos uma classe com dois campos: name e age, podemos escrever this.name dentro do construtor ou método, e isso irá se referir especificamente ao campo da classe, e 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 nos ajuda a inicializar todos os campos para tornar 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; } }

Temos 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. Vamos utilizar esse construtor no método main para que você possa ver que os campos são inicializados com o que passamos 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 ao passar o 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. Sempre 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 é necessário 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, é possível 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

course content

Conteúdo do Curso

Java Avançado

Java Avançado

1. Estrutura Profunda do Java
2. Métodos
3. String Avançado
4. Classes
5. Classes Avançadas

book
Construtor

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; }

Análise de cada termo apresentado:

  • modifier: Refere-se ao modificador de acesso, que geralmente é public para construtores. Situações em que um construtor pode ter outro modificador de acesso serão abordadas em curso separado;
  • ClassName: Nome da classe na qual o construtor está sendo criado;
  • ParameterType: Tipo do parâmetro utilizado no construtor. É importante atentar-se, 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 seja necessário inicializar todos os campos pelo construtor). Caso seja necessário inicializar apenas um campo específico da classe pelo construtor, por exemplo, name, deve-se utilizar apenas um parâmetro com o mesmo tipo e nome do campo na classe;
  • Em seguida, dentro do corpo do construtor, os valores são atribuídos aos campos da classe utilizando os valores passados como 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 temos uma classe com dois campos: name e age, podemos escrever this.name dentro do construtor ou método, e isso irá se referir especificamente ao campo da classe, e 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 nos ajuda a inicializar todos os campos para tornar 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; } }

Temos 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. Vamos utilizar esse construtor no método main para que você possa ver que os campos são inicializados com o que passamos 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 ao passar o 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. Sempre 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 é necessário 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, é possível 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