Carregando...

Objetos em Java

Escreva uma classe chamada Chip em Chip.java com um método beep que imprima ok. O método não é static nesta página. Num segundo ficheiro Bench.java, construa um chip com Chip c = new Chip();, depois chame c.beep();. Compile ambos os ficheiros e execute java Bench. O ecrã deve mostrar uma linha: ok. A palavra new constrói um objeto a partir da classe. A variável c guarda esse objeto. Chama beep em c, não no nome nu da classe. Esse objeto construído — e a chamada que o usa — é o que esta página ensina.

Um objeto a partir da classe

Uma classe continua a ser o tipo com nome. Um objeto é um valor construído a partir desse tipo. A linha new Chip() pede à Java que construa esse valor. Guarda-o numa variável de tipo Chip e usa a variável para alcançar métodos que pertencem a cada objeto.
Crie primeiro Chip.java. A linha public class é public class Chip. Não deixe um nome de classe antigo Badge ou Desk neste ficheiro. Dentro das chavetas escreva void beep() — sem a palavra static neste cabeçalho. O corpo é uma impressão: System.out.println("ok");. Mantenha void. O método não devolve um número. Em Chip.java não há main nesta página. Guarde o ficheiro antes de compilar.

Chip with beep

java
public class Chip {
    void beep() {
        System.out.println("ok");
    }
}

Bench constrói o chip e depois chama beep

Crie Bench.java na mesma pasta. A linha public class é public class Bench. Dentro de main, escreva duas linhas: primeiro Chip c = new Chip();, depois c.beep();. A primeira declara uma variável c de tipo Chip e preenche-a com um objeto novo. A segunda chama beep nesse objeto. O ponto fica depois do nome da variável, não só depois do nome da classe.

Bench builds one chip

java
public class Bench {
    public static void main(String[] args) {
        Chip c = new Chip();
        c.beep();
    }
}

Da pasta que guarda ambos os ficheiros, execute javac Chip.java Bench.java. Pode compilar primeiro Chip.java e depois Bench.java quando ambos estiverem completos. Quando parênteses, chavetas e ponto e vírgula coincidem, o javac não escreve uma linha própria. Depois execute java Bench — não java Bench.java, nem java Chip. Tire o final .java do comando de execução. Arranque a classe que guarda main. Os mesmos comandos funcionam no Windows e no macOS.
O programa deve imprimir uma linha e parar: ok. Não deve pedir que escreva. Se o terminal esperar teclado, ainda há uma chamada nextLine de um exercício antigo num ficheiro. Apague-a e mantenha Chip c = new Chip(); mais c.beep(); em Bench, com beep em Chip.
Percorra a execução uma vez. Java começa em Bench.main. A expressão new Chip() constrói um objeto. Esse objeto é guardado em c. A chamada c.beep() entra em beep para esse objeto. O método imprime ok e regressa. Depois Bench termina. A linha do ecrã veio do método do objeto, depois de new ter criado o objeto.
Pense na classe como o plano no disco e no objeto como uma peça construída em memória para esta execução. Compila o plano uma vez. Cada new Chip() constrói outra peça. A variável nomeia a peça para que linhas posteriores a alcancem. Sem esse nome, nesta página não fica pega para beep.

Por que a chamada usa c, não Chip sozinho

Na página de classes, um método static podia chamar-se Badge.show() com o nome do tipo. Aqui beep não tem a palavra static. A Java espera primeiro um objeto. Escrever Chip.beep(); sem objeto não encaixa nesta forma de principiante. Construa com new, guarde o resultado numa variável, depois chame através dessa variável.
Se escrever só new Chip(); e nunca guardar, ainda assim construiu um objeto, mas não tem nome para chamar beep. Nesta página mantenha a variável: Chip c = new Chip(); depois c.beep();. A variável é o caminho até ao objeto depois de new terminar.
Uma demo static sobrante pode confundir a pasta. Um ficheiro que ainda chama Badge.show(); é a forma da lição anterior. Para esta página mantenha Chip e Bench e a linha new. Aqui não precisa de Badge.

Dois objetos, dois beeps

Pode construir mais do que um objeto a partir da mesma classe. Cada new Chip() faz um objeto separado. Cada objeto pode executar beep por si. O texto da classe é partilhado; os objetos não são o mesmo valor.

Bench builds two chips

java
public class Bench {
    public static void main(String[] args) {
        Chip a = new Chip();
        Chip b = new Chip();
        a.beep();
        b.beep();
    }
}

Compile e execute de novo: javac Chip.java Bench.java, depois java Bench. O ecrã deve mostrar duas linhas: ok, depois ok. A primeira veio de a. A segunda de b. Ambas usaram o mesmo texto do método beep em Chip, mas cada chamada correu num objeto diferente construído com new.
Se o ecrã mostrar só um ok, verifique se ambas as chamadas estão presentes e se ambas as variáveis foram construídas com new. Escrever Chip b = a; não constrói um segundo objeto; faz b apontar para o mesmo objeto que a. Essa ideia espera páginas posteriores. Nesta página use duas expressões new Chip() quando quiser dois objetos.

O que esta página deixa para fields

Esta página ainda não guarda um número nem uma palavra dentro do chip. Os campos — nomes que guardam dados em cada objeto — são a página seguinte. Aqui o objeto existe depois de new, e o método de instância beep só imprime. Isso basta para ver a separação entre a classe como tipo e um objeto como valor construído.
Pode mudar o nome da variável de c para unit: Chip unit = new Chip(); depois unit.beep();. O ecrã permanece ok quando o corpo do método ainda imprime essa palavra. O nome da variável é seu; o nome do tipo Chip e a expressão new Chip() devem continuar a coincidir.
Se o javac disser que não encontra o símbolo Chip ao compilar Bench.java, verifique que Chip.java está na mesma pasta e que a linha da classe diz mesmo public class Chip. Se a execução não imprimir nada, confirme que main ainda chama c.beep(); depois da linha new e que beep ainda contém println.

Antes de fields

Pode escrever Chip com void beep(), construir um objeto com Chip c = new Chip(); e chamar c.beep(); a partir de Bench. Compile ambos os ficheiros e execute java Bench. O ecrã mostra ok. Um segundo new Chip() constrói outro objeto que pode fazer beep sozinho. A página seguinte é fields; aí cada objeto começa a guardar os seus próprios dados.

🧠 Teste Seu Conhecimento

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

❓
5
Perguntas
🎯
70%
Para Passar
♾️
∞
Tempo
🔄
∞
Tentativas

📝 Instruções

  • Leia cada pergunta cuidadosamente
  • Selecione a melhor resposta para cada pergunta
  • Você pode refazer o quiz quantas vezes quiser
  • Seu progresso será mostrado no topo