Fácil Java

Criando a classe Livro

Enunciado

Crie uma classe Livro com os atributos titulo e autor (ambos String) e um construtor que receba esses dois valores. Adicione um método exibir() que imprima titulo + " por " + autor. No main, crie dois livros e chame exibir() em cada um.

Requisitos

  • A classe Livro deve ter os atributos titulo e autor.
  • O construtor deve receber os dois valores e usar this para atribuí-los.
  • O método exibir() deve imprimir no formato titulo por autor.
  • O main deve criar dois livros e chamar exibir() em ambos.

Código inicial

public class Livro {
    // declare os atributos aqui

    // escreva o construtor

    // escreva o metodo exibir()

    public static void main(String[] args) {
        // crie dois livros e chame exibir()
    }
}

Saída esperada

Dom Casmurro por Machado de Assis
O Hobbit por J. R. R. Tolkien
Ver dica

Use this.titulo = titulo; no construtor para diferenciar o atributo do parâmetro de mesmo nome.

Mostrar solução
public class Livro {
    private String titulo; // atributo de instancia
    private String autor;  // atributo de instancia

    // Construtor: recebe os valores e inicializa o objeto.
    public Livro(String titulo, String autor) {
        this.titulo = titulo; // 'this' aponta para o atributo do objeto
        this.autor = autor;
    }

    // Metodo de instancia: usa os atributos do proprio objeto.
    public void exibir() {
        System.out.println(titulo + " por " + autor);
    }

    public static void main(String[] args) {
        Livro l1 = new Livro("Dom Casmurro", "Machado de Assis");
        Livro l2 = new Livro("O Hobbit", "J. R. R. Tolkien");
        l1.exibir();
        l2.exibir();
    }
}

Passo a passo

  1. Declaramos os atributos titulo e autor como private String, ou seja, cada objeto Livro terá seus próprios valores.
  2. O construtor Livro(String titulo, String autor) tem o mesmo nome da classe e nenhum tipo de retorno — é chamado automaticamente pelo new.
  3. Dentro do construtor usamos this.titulo = titulo; para deixar claro que o lado esquerdo é o atributo do objeto e o direito é o parâmetro recebido.
  4. O método exibir() acessa titulo e autor diretamente, pois pertence à mesma classe.
  5. No main, new Livro(...) cria duas instâncias independentes e cada chamada de exibir() imprime os valores daquela instância.

Por que funciona

Cada objeto carrega sua própria cópia dos atributos de instância. O construtor garante que todo Livro nasce com valores válidos, e this resolve a ambiguidade entre atributo e parâmetro. Como exibir() é um método de instância, ele enxerga os atributos do objeto em que foi chamado.

Erros comuns

  • Esquecer o this no construtor: titulo = titulo; apenas reatribui o parâmetro a ele mesmo; o atributo continua null.
  • Declarar o construtor com tipo de retorno, por exemplo public void Livro(...): isso vira um método comum e o new não o usa.
  • Tentar chamar exibir() sem instância, como Livro.exibir();: gera erro de compilação porque exibir não é static.

Outra forma de resolver

Se os atributos fossem final (imutáveis), o mesmo construtor serviria; a diferença é que não poderiam ser alterados depois:

private final String titulo;
private final String autor;

Saída esperada

Dom Casmurro por Machado de Assis
O Hobbit por J. R. R. Tolkien