Por que os métodos existem
Um método é um bloco de código nomeado que você pode executar sempre que chamar o seu nome. Em vez de escrever as mesmas linhas repetidamente, você as escreve uma única vez dentro de um método e o chama quantas vezes precisar. Isso deixa os programas mais curtos, mais fáceis de ler e bem mais fáceis de corrigir: você muda a lógica em um único lugar e todos que chamam o método recebem a atualização.
Você já vem chamando métodos: System.out.println(...) é uma chamada de método, e list.size() também. Agora você vai escrever os seus próprios.
Declarando e chamando um método
A declaração de um método tem quatro partes: um tipo de retorno, um nome, um par de parênteses (para os parâmetros) e um corpo entre chaves. Aqui está o menor exemplo útil: um método que faz algum trabalho e não devolve nada:
Leia as partes de static void printGreeting():
static: permite quemaino chame diretamente sem criar um objeto (mais sobre isso abaixo).void: este método não devolve nenhum valor.printGreeting: o nome que você usa para chamá-lo.(): os parênteses vazios indicam que ele não recebe nenhuma entrada.
Você chama um método escrevendo o seu nome seguido de parênteses. As duas chamadas em main executam o corpo duas vezes, então isso imprime a saudação duas vezes.
Devolvendo um valor
A maioria dos métodos calcula algo e o devolve com return. O tipo de retorno antes do nome diz que tipo de valor sai; aqui, int:
square(5) é avaliado como 25, que você pode guardar em uma variável, imprimir ou usar dentro de uma expressão maior: uma chamada de método representa o valor que ela devolve. No momento em que return é executado, o método termina e o controle volta para quem o chamou. Qualquer código que venha depois de um return no mesmo caminho nunca é executado.
O tipo de retorno e o valor devolvido devem coincidir. Declarar int e tentar return "text"; é um erro de compilação: o compilador faz cumprir o contrato.
void versus um tipo de retorno
A distinção é simples: use um tipo de retorno real quando quem chama precisa receber um valor de volta, e void quando o método apenas faz algo (imprime, salva, atualiza o estado).
void logMessage(String msg) // faz o trabalho, não devolve nada
int add(int a, int b) // calcula um valor que quem chama usa
Um erro comum de iniciantes é tentar usar o "resultado" de um método void:
int x = printGreeting(); // erro de compilação: printGreeting() devolve void
Não há nenhum valor para atribuir, então isso não compila. Se você se pegar querendo o resultado de um método void, é sinal de que ele deveria devolver algo.
Métodos que se ramificam e devolvem cedo
Você pode usar return em mais de um ponto. Devolver cedo, assim que você souber a resposta, costuma ser mais claro do que aninhar tudo dentro de else:
Como cada return sai imediatamente, vence a primeira condição que for satisfeita. Apenas garanta que todo caminho dentro de um método que devolve um valor termine em um return: se algum ramo puder sair sem devolver nada, o compilador reclama com "missing return statement". O return "F"; final cobre aqui o caso de saída.
O que static significa aqui
Você pode ter notado que todos os métodos acima são static. Um método static pertence à própria classe, não a nenhum objeto, então main (que também é static) pode chamá-lo diretamente pelo nome. Sem static, o método pertence a uma instância e você precisaria de um objeto para chamá-lo.
Por enquanto, enquanto você escreve programas pequenos cuja lógica vive junto de main, marque seus métodos auxiliares como static para que possam ser chamados da mesma maneira. Quando você começar a construir suas próprias classes e objetos, também vai escrever métodos não estáticos (de instância): isso vem com o capítulo de classes.
Variáveis locais ficam dentro do método
Variáveis declaradas dentro de um método existem apenas ali. Elas são criadas quando o método é executado e somem quando ele termina: quem o chama nunca as vê:
total e i vivem inteiramente dentro de sumTo. A única coisa que escapa do método é o valor que você return. Esse isolamento é uma vantagem: cada método é uma unidade autônoma sobre a qual você pode raciocinar sem se preocupar que suas variáveis temporárias vazem ou colidam com nomes de outro lugar.
Próximo: parâmetros de métodos
Todos os métodos aqui ou não recebiam nenhuma entrada ou recebiam um único valor. O verdadeiro poder vem de passar dados para dentro, e Java tem regras específicas sobre como os argumentos são passados, o que acontece com objetos versus primitivos e como dar a um parâmetro algo parecido com um valor padrão. É disso que trata a próxima página.
Perguntas frequentes
O que é um método em Java?
Um método é um bloco de código nomeado que você pode executar quando quiser chamando o seu nome. Ele agrupa uma tarefa em um único lugar para que você possa reutilizá-la em vez de repetir as mesmas linhas. Um método pode receber entradas (parâmetros) e devolver um resultado (um valor de retorno), ou fazer o seu trabalho sem devolver nada (void).
Como criar e chamar um método em Java?
Declare-o com um tipo de retorno, um nome e parênteses: static int square(int n) { return n * n; }. Depois chame-o pelo nome com os argumentos entre parênteses: int result = square(5);. Um método que não devolve nada usa void e é chamado como uma instrução independente, como printGreeting();.
O que significa void em um método Java?
void significa que o método não devolve nenhum valor: ele faz o seu trabalho (como imprimir) e não entrega nada a quem o chamou. Você não pode atribuir o resultado de um método void a uma variável. Se um método deve produzir um valor que quem chama vai usar, dê a ele um tipo de retorno real como int ou String e use return no lugar.