Aula 61 | Entendendo Classes e Objetos
No mundo real, podemos descrever qualquer coisa — uma pessoa, um carro, um produto — usando duas ideias simples: características (o que ela tem) e comportamentos (o que ela faz). Em Java, uma classe é o modelo que reúne essas duas ideias em um único lugar.
O principal objetivo de uma classe é a organização do código. Vamos entender isso com um exemplo concreto.
Imagine que você vai criar um aplicativo para uma escola com 100 alunos
e precisa cadastrar cada aluno com as seguintes informações:
nome, idade, ano e turma.
Todos os alunos têm esses mesmos dados, mas com valores diferentes.
Sem classes, você seria forçado a criar 100 variáveis de nome, 100 de idade, 100 de ano e 100 de turma — 400 variáveis no total só para 100 alunos. Depois, a escola cresceu e passou para 200 alunos: mais 400 variáveis. O código rapidamente se tornaria impossível de ler e manter.
Com uma classe, você cria um único molde com esses 4 atributos e, a partir daí, basta associar cada objeto (aluno) a essa classe e inserir os valores de cada atributo para cada aluno. O código fica mais limpo e organizado. Esse é o principal motivo de se usar classes.
Pense em uma classe como a receita de um bolo: a receita em si não é o bolo, mas descreve todos os ingredientes e os passos para fazê-lo. Cada vez que você seguir a receita, você criará um bolo diferente — um objeto.
Define a estrutura: quais dados existem e quais ações são possíveis. Existe apenas uma vez no código.
É criado a partir da classe com a palavra new. Pode existir muitos objetos de uma mesma classe.
Os atributos são as variáveis declaradas dentro de uma classe, mas fora de qualquer método. Eles representam as características que todo objeto daquela classe possuirá.
No exemplo abaixo, a classe Cliente possui quatro atributos:
nome (nome do cliente), peso (peso em quilogramas),
altura (altura em metros) e idade (idade em anos).
Cada objeto criado a partir dessa classe terá seus próprios valores de forma independente.
public class Cliente {
String nome; // nome do cliente
double peso; // peso em quilogramas
double altura; // altura em metros
int idade; // idade em anos
}
String nome atributo
double peso atributo
double altura atributo
int idade atributo
new
Para usar uma classe, precisamos instanciá-la, ou seja, criar um objeto
a partir dela. Em Java, isso é feito com a palavra-chave new.
Cliente cliente1 = new Cliente();
Lendo essa linha da esquerda para a direita:
Cliente → o tipo da variável (a classe que criamos)cliente1 → o nome do objeto (a variável que vai guardar o objeto)= new Cliente() → cria um novo objeto do tipo Cliente na memórianew, usamos o ponto (.) para
acessar os atributos desse objeto. Por exemplo: cliente1.peso = 75.0; atribui
o valor 75.0 ao atributo peso do objeto cliente1.
EstruturaSimples
Agora veja um programa completo que usa a classe Cliente.
Observe como três objetos são criados a partir do mesmo molde — cada um com seus
próprios valores — e como os atributos são usados em uma condição if-else.
public class Cliente {
String nome; // nome do cliente
double peso; // peso em quilogramas
double altura; // altura em metros
int idade; // idade em anos
}
public class EstruturaSimples {
public static final double alturaMaxima = 1.90; // constante: altura máxima em metros
public static void main(String[] args) {
// cliente1
Cliente cliente1 = new Cliente();
cliente1.nome = "Ana Silva";
cliente1.peso = 62.5;
cliente1.altura = 1.65;
cliente1.idade = 28;
// cliente2
Cliente cliente2 = new Cliente();
cliente2.nome = "Bruno Costa";
cliente2.peso = 88.0;
cliente2.altura = 1.82;
cliente2.idade = 35;
// cliente3
Cliente cliente3 = new Cliente();
cliente3.nome = "Carla Souza";
cliente3.peso = 55.0;
cliente3.altura = 1.93;
cliente3.idade = 22;
// Exibindo dados de cada cliente com verificação de altura
Cliente[] clientes = {cliente1, cliente2, cliente3};
for (Cliente c : clientes) {
System.out.print(c.nome + " | Peso: " + c.peso
+ " kg | Altura: " + c.altura
+ " m | Idade: " + c.idade + ". ");
if (c.altura > alturaMaxima)
System.out.println("Altura acima da máxima.");
else
System.out.println("Altura dentro do padrão.");
}
}
}
Saída no terminal:
Ana Silva | Peso: 62.5 kg | Altura: 1.65 m | Idade: 28. Altura dentro do padrão.
Bruno Costa | Peso: 88.0 kg | Altura: 1.82 m | Idade: 35. Altura dentro do padrão.
Carla Souza | Peso: 55.0 kg | Altura: 1.93 m | Idade: 22. Altura acima da máxima.
| Trecho do código | O que significa |
|---|---|
public class Cliente |
Declaração da classe molde com quatro atributos. |
public static final double alturaMaxima = 1.90 |
Constante: valor fixo que não pode ser alterado após a atribuição. |
new Cliente() |
Cria um objeto do tipo Cliente na memória. |
cliente1.peso = 62.5 |
Acessa o atributo peso do objeto cliente1 e atribui 62.5. |
System.out.print(...) |
Imprime na tela sem pular linha ao final. |
System.out.println(...) |
Imprime na tela pulando uma linha ao final. |
if / else |
Estrutura de controle que executa blocos diferentes dependendo da condição. |
Uma das grandes vantagens de usar classes é poder criar múltiplos objetos independentes a partir do mesmo molde. Cada objeto tem seus próprios valores de atributos, sem interferir nos outros.
Cliente cliente1 = new Cliente(); cliente1.nome = "Ana Silva"; cliente1.peso = 62.5; cliente1.altura = 1.65; cliente1.idade = 28; Cliente cliente2 = new Cliente(); cliente2.nome = "Bruno Costa"; cliente2.peso = 88.0; cliente2.altura = 1.82; cliente2.idade = 35; System.out.println(cliente1.nome + " – Peso: " + cliente1.peso + ", Altura: " + cliente1.altura); System.out.println(cliente2.nome + " – Peso: " + cliente2.peso + ", Altura: " + cliente2.altura);
Saída no terminal:
Ana Silva – Peso: 62.5, Altura: 1.65
Bruno Costa – Peso: 88.0, Altura: 1.82
cliente1 e cliente2 são dois objetos distintos que existem
ao mesmo tempo na memória. Alterar cliente1.peso não afeta
cliente2.peso.
Pense em uma classe como um gaveteiro. O gaveteiro em si é a classe
— no nosso caso, Cliente. Cada gaveta é um atributo:
uma gaveta chamada nome, outra peso, outra altura
e outra idade.
Agora, imagine que você precisa guardar os dados de três clientes diferentes. Com o gaveteiro, você simplesmente cria três instâncias (objetos) e cada uma tem suas próprias gavetas:
Cliente cliente1 = new Cliente(); cliente1.nome = "Ana Silva"; cliente1.peso = 62.5; cliente1.altura = 1.65; cliente1.idade = 28; Cliente cliente2 = new Cliente(); cliente2.nome = "Bruno Costa"; cliente2.peso = 88.0; cliente2.altura = 1.82; cliente2.idade = 35; Cliente cliente3 = new Cliente(); cliente3.nome = "Carla Souza"; cliente3.peso = 55.0; cliente3.altura = 1.93; cliente3.idade = 22;
Sem classes, você seria obrigado a criar uma variável separada para cada combinação de cliente e dado, resultando em um código confuso e difícil de manter:
// Sem classes — código desorganizado e trabalhoso:
String cliente1_nome = "Ana Silva"; double cliente1_peso = 62.5;
double cliente1_altura = 1.65; int cliente1_idade = 28;
String cliente2_nome = "Bruno Costa"; double cliente2_peso = 88.0;
double cliente2_altura = 1.82; int cliente2_idade = 35;
String cliente3_nome = "Carla Souza"; double cliente3_peso = 55.0;
double cliente3_altura = 1.93; int cliente3_idade = 22;
Cliente, as gavetas nome, peso,
altura e idade servem para todos os clientes:
cliente1.peso, cliente2.peso, cliente3.peso…
Você não precisa inventar novos nomes de variáveis.
Basta criar um novo objeto com new e todas as gavetas já vêm prontas.
Isso torna o código muito mais organizado, legível e escalável: se amanhã você precisar guardar dados de 100 clientes, basta criar 100 objetos — não 400 variáveis avulsas.
✅ Uma classe é um molde que define atributos e comportamentos.
✅ Um objeto é criado a partir de uma classe usando a palavra new.
✅ Os atributos são acessados com o operador ponto: objeto.atributo.
✅ Podem existir vários objetos de uma mesma classe, cada um com seus próprios valores.
✅ Uma constante (final) tem seu valor fixo e não pode ser alterado depois da primeira atribuição.
Crie uma classe chamada Produto com os atributos String nome,
double preco e int quantidade.
Em seguida, na classe principal, crie dois objetos dessa classe com dados de produtos
diferentes e imprima no terminal o nome, o preço e a quantidade de cada produto.
Use printf com duas casas decimais para o preço.
public class Produto {
String nome;
double preco;
int quantidade;
}
public class DesafioProduto {
public static void main(String[] args) {
Produto p1 = new Produto();
p1.nome = "Café";
p1.preco = 12.90;
p1.quantidade = 3;
Produto p2 = new Produto();
p2.nome = "Açúcar";
p2.preco = 5.49;
p2.quantidade = 2;
System.out.printf("Produto: %s | Preço: R$ %.2f | Qtd: %d%n", p1.nome, p1.preco, p1.quantidade);
System.out.printf("Produto: %s | Preço: R$ %.2f | Qtd: %d%n", p2.nome, p2.preco, p2.quantidade);
}
}
Saída esperada:
Produto: Café | Preço: R$ 12,90 | Qtd: 3
Produto: Açúcar | Preço: R$ 5,49 | Qtd: 2
Reforce o conteúdo desta aula com mais dois exercícios práticos: