Carregando...

static em Java

Escreva uma classe Tag em Tag.java com um método static static void ping() que imprime ok. Em Yard.java, chame Tag.ping(); a partir de main sem new Tag() nesta página. Compile ambos os ficheiros e execute java Yard. O ecrã deve mostrar uma linha: ok. O método pertence ao nome da classe Tag, não a uma variável de objeto. Chamar através do nome da classe é o que esta página ensina.

Um método no nome da classe

Na página de métodos de instância você escrevia j.bump() depois de new Jar(3). Essa chamada precisava de um objeto. Um método static não precisa. Você escreve Tag.ping(); com o nome da classe. A Java executa esse método sem construir um objeto Tag primeiro nesta página.
Crie Tag.java primeiro. A linha public class é public class Tag. Não deixe um nome de classe antigo Jar ou Tin aqui. Dentro das chavetas escreva um método:
static void ping() { System.out.println("ok"); }
Não há campo nem construtor neste primeiro demo. Não há main em Tag.java. Guarde antes de compilar. A palavra static fica no cabeçalho do método antes de void. Sem static, uma chamada posterior Tag.ping(); a partir de Yard não corresponde à forma de método de instância que esta página quer.

Tag with static ping

java
public class Tag {
    static void ping() {
        System.out.println("ok");
    }
}

Yard chama Tag.ping

Crie Yard.java na mesma pasta. A linha public class é public class Yard. Dentro de main, escreva uma chamada: Tag.ping();. Não escreva Tag t = new Tag(); nesta página. Não escreva t.ping(); como caminho da lição. O nome da classe antes do ponto basta.
Mantenha Yard como a classe que tem main. Não coloque main dentro de Tag nesta lição. Se um ficheiro Desk restante da página de métodos de instância ainda está na pasta, não execute java Desk nesta lição — execute java Yard depois de compilar Tag.java e Yard.java.

Yard calls Tag.ping

java
public class Yard {
    public static void main(String[] args) {
        Tag.ping();
    }
}

Da pasta que guarda ambos os ficheiros, execute javac Tag.java Yard.java. Você pode compilar Tag.java primeiro e Yard.java em seguida quando ambos estiverem completos. Quando parênteses, chavetas e ponto e vírgula coincidem, javac não escreve linha própria. Depois execute java Yard — não java Yard.java, e não java Tag. Tire o final .java do comando de execução. Arranque a classe que tem main. Os mesmos comandos funcionam no Windows e no macOS.
O programa deve imprimir uma linha e parar: ok. Não deve pedir que você digite. Se o terminal esperar entrada do teclado, uma chamada nextLine de um exercício antigo ainda está num ficheiro. Apague essa chamada e mantenha Tag.ping(); em Yard, com static void ping em Tag.
Percorra a execução uma vez. A Java começa em Yard.main. A chamada Tag.ping() encontra o método static na classe Tag e executa o seu corpo. O corpo imprime ok. Nenhum objeto foi construído. O ecrã mostra ok. Nada mais deve imprimir. Se você vir 4 ou 5, ainda está a executar um programa Desk antigo da lição bump.
Se você escrever ping(); sem Tag. à frente dentro de Yard.main, javac recusa nesta forma. O método static ainda precisa do seu nome de classe (ou de um estilo de import cuidadoso que você ainda não usa). Mantenha Tag.ping();. Se você colocar void sem static, então Tag.ping(); é o tipo errado de chamada para um método de instância — ponha static de volta. O cabeçalho deve parecer static void ping(), não void ping() sozinho, e não static int ping() para este demo de impressão.

Tag.ping e j.bump lado a lado

Uma tabela curta mantém as duas formas de chamada claras.

📊 static vs instance call

Chamada Precisa de um objeto primeiro?
Tag.ping(); não — o nome da classe basta
j.bump(); sim — depois de Jar j = new Jar(3);
static void ping() método na classe
void bump() método em cada objeto
A tabela é só um lembrete. A linha tipada que você mantém nesta página é Tag.ping(); em Yard, com static void ping() em Tag.

Comparado com métodos de instância

Na página de métodos de instância, j.bump() mudava fill num jar. Isso ainda funciona. Esta página não muda um campo. Só imprime ok a partir de um método static para você ver a chamada pelo nome da classe. Um demo restante Jar j = new Jar(3); j.bump(); é outra lição. Para esta página mantenha Tag e Yard e Tag.ping();.
Você ainda pode construir objetos noutros dias. Esta lição escolhe de propósito o caminho static. Não misture j.bump() e Tag.ping() no mesmo demo Yard nesta página. Um caminho claro basta: static no método, nome da classe antes da chamada, impressão ok. Quando mais tarde precisar dos dois estilos num programa, mantenha cada chamada honesta — objeto antes dos métodos de instância, nome da classe antes dos métodos static — para o leitor ver que tipo você quis.

Você não precisa de new Tag para esta chamada

Como ping é static, Yard não aloca um objeto Tag antes da chamada. Escrever Tag t = new Tag(); e depois t.ping(); pode compilar para um método static em muitas configurações, mas não é a forma que esta página ensina. Fique só com Tag.ping();. Se o ecrã mostrar 4 ou 5, um demo Desk bump antigo ainda está a correr — mude para java Yard.
Se javac disser que não encontra o símbolo ping em Tag, verifique que o cabeçalho do método inclui static e que ambos os ficheiros estão na mesma pasta. Se java Tag correr e não fizer nada útil, você arrancou a classe errada — arranque Yard, que tem main.

O que isto deixa para access

Esta página usa uma classe public e um método static visível na mesma pasta. Uma página mais tarde — access — mostra palavras como public e private nos membros. Fique aqui com a chamada static. Não invente private static nesta página a menos que já o conheça; o objetivo da lição é Tag.ping(); com static void ping().
Quando a pasta ainda guarda Jar.java ou Desk.java, deixe-os ou apague-os só se confundirem o seu comando de compilação. Execute java Yard depois de compilar o par Tag e Yard desta lição.

Antes de access

Você pode escrever static void ping() { System.out.println("ok"); } em Tag, e a partir de Yard chamar Tag.ping(); sem objeto. Compile ambos os ficheiros e execute java Yard. O ecrã mostra ok. O método static correu no nome da classe. A página seguinte é access, onde você controla que nomes outras classes podem ver.
Mantenha static no método. Mantenha o nome da classe antes da chamada. Mantenha main em Yard. Esses três hábitos são o ponto de controlo desta página antes de avançar.

🧠 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

❓
6
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