Menu

Classes em Java: definir campos, métodos e objetos

O que é uma classe em Java, como definir campos e métodos, criar objetos com new, o papel do this e por que o estado de instância vive no objeto.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Uma classe é um modelo

Até agora seu código viveu em métodos que passam valores simples de um lado para o outro. Uma classe permite agrupar dados relacionados e o comportamento que opera sobre eles em um único tipo nomeado. A classe é o modelo; as coisas reais com que você trabalha são os objetos criados a partir dela.

Uma classe declara dois tipos de membros: campos (os dados que cada objeto guarda) e métodos (o que cada objeto pode fazer).

new Dog() cria um objeto na memória e entrega a você uma referência para ele. d.name e d.bark() acessam esse objeto específico.

Cada objeto tem seu próprio estado

O sentido de uma classe é que você pode produzir muitos objetos independentes, cada um carregando seus próprios valores de campo. Alterar um nunca afeta o outro.

rex e bella são dois objetos distintos. Cada um tem seu próprio name, então cada bark() imprime um valor diferente. Esses dados por objeto são chamados de estado de instância.

Campos e métodos trabalham juntos

Os métodos dentro de uma classe podem ler e atualizar diretamente os campos do próprio objeto, sem precisar passá-los como parâmetros. O método já "vive no" objeto cujos dados ele acessa.

Repare que increment() não recebe argumentos. Ele opera sobre o campo que pertence ao Counter no qual você o chamou. Essa é a diferença entre um método de classe e um método estático solto: o método tem um objeto implícito sobre o qual atuar.

A palavra-chave this

Dentro de um método, this é uma referência ao objeto no qual o método foi chamado. Em geral você não precisa dela: escrever count já significa this.count. Mas this se torna essencial quando o nome de um parâmetro colide com o de um campo, o que acontece o tempo todo em setters e construtores.

Um erro comum de iniciante é escrever x = x; dentro de move. Isso apenas atribui o parâmetro a si mesmo e deixa o campo intacto: o compilador não avisará e seu objeto manterá silenciosamente os valores antigos. this.x = x; é o que realmente atualiza o campo.

Valores padrão de campos e referências null

Quando você cria um objeto, seus campos não ficam com lixo: o Java os inicializa com valores padrão: 0 para números, false para boolean e null para referências a objetos como String. Esse valor padrão null é a origem de uma falha clássica.

u.name é null porque ninguém o definiu, então chamar .length() sobre ele lança uma NullPointerException. Sempre atribua valores significativos a um objeto antes de usar seus campos, que é exatamente o problema que os construtores resolvem.

Organizando o código em torno de classes

Programas reais modelam seu domínio como classes que mantêm juntos os dados e as operações sobre eles. Aqui, uma única classe BankAccount guarda um saldo e controla como ele muda:

Os dados (balance) e as regras para alterá-los (deposit, withdraw) vivem em um único lugar. O código de outras partes pede à conta para fazer coisas em vez de mexer diretamente em seus números: a base de um design limpo e fácil de manter.

A seguir: construtores

Definir cada campo manualmente depois do new é tedioso e fácil de esquecer e, como você acabou de ver, um campo esquecido deixa um null à espera para causar uma falha. Um construtor permite exigir e inicializar os campos de um objeto no momento exato em que ele é criado, de modo que uma BankAccount nunca possa existir sem um proprietário. É disso que trata a próxima página.

Perguntas frequentes

O que é uma classe em Java?

Uma classe é um modelo que define os dados (campos) e o comportamento (métodos) que um tipo de objeto terá. A classe em si é apenas o molde: você cria objetos reais a partir dela com new. Por exemplo, uma classe Dog descreve que todo cachorro tem um name e pode fazer bark(), enquanto cada new Dog() é um cachorro distinto com seu próprio nome.

Qual é a diferença entre uma classe e um objeto em Java?

Uma classe é a definição; um objeto é uma instância concreta construída a partir dessa definição com new. Uma única classe Person pode produzir muitos objetos Person, cada um guardando seus próprios valores de campo. Pense na classe como a forma de biscoitos e nos objetos como os biscoitos individuais: alterar os campos de um objeto nunca afeta os de outro.

O que a palavra-chave this faz em uma classe Java?

this se refere ao objeto atual, a instância específica cujo método está em execução. Você a usa para acessar os próprios campos de um objeto, especialmente quando um parâmetro tem o mesmo nome de um campo (this.name = name;). Sem this, a atribuição apenas atribuiria o parâmetro a si mesmo e o campo permaneceria inalterado.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR