Projetando Métodos: Java
Todo programa interessante Java que já vimos, tinha um método main(). Você pode escrever outros métodos também. Por exemplo, você pode escrever um método básico para tirar uma soneca, como mostrado na figura abaixo:
Isto é conhecido como uma declaração de método, o qual especifica toda informação necessária para chamar o método. Existem várias partes, e nós vamos cobrir uma por uma em mais detalhes. Duas das partes - o nome do método e a lista de parâmetros - são chamadas de assinatura de método.
A tabela abaixo é uma breve referência dos elementos de uma declaração de método. Não se preocupe se isto parece muita informação, quando chegar a hora de você terminar este artigo, tudo vai se encaixar.
Para chamar este método, apenas escreva seu nome, seguido de um único valor int entre parênteses: nap(10);
Vamos começar dando uma olhada em cada uma das partes de um método básico.
Modificadores de Acesso
Java oferece quatro alternativas de modificadores de acesso:
private O modificador privado significa que o método pode ser chamado apenas de dentro da mesma classe.
Default (Package-Private) Access Com acesso default, o método pode ser chamado apenas por classes do mesmo pacote. Isto é complicado porque não existe palavra-chave para acesso default. Você simplesmente omite o modificador de acesso.
protected O modificador de acesso protected significa que o método pode ser chamado apenas por classes no mesmo pacote ou subclasses.
public O modificador de acesso public significa que o método pode ser chamado de qualquer classe.
Nós vamos ver exemplos práticos enquanto passamos em cada um dos elementos do método nesta seção. Certifique-se de que você entende por que cada um desses é uma declaração de método válida ou inválida. Preste atenção ao modificador de acesso e como você descobre o que está errado com aqueles que não compilam quando inseridos dentro de uma classe:
O método walk1() é uma declaração válida com acesso público. O método walk4() é uma declaração válida com acesso default. O método walk2() não compila porque default não é um modificador de acesso válido. O método walk3() não compila porque o modificador de acesso é especificado depois do tipo de retorno.
Especificadores Opcionais
Diferente de modificadores de acesso, você pode ter múltiplos especificadores no mesmo método (embora nem todas as combinações sejam legais). Quando isso ocorre, você pode especificar eles em qualquer ordem. E desde que esses especificadores sejamopcionais, você tem permissão para não ter nenhum deles. Isto significa que você pode ter zero ou mais especificadores em uma declaração de método.
static O modificador static é usado para métodos de classe.
abstract O modificador abstract é usado quando o corpo do método não é fornecido.
final O modificador final é usado quando não é permitido que um método seja sobrescrito por uma subclasse.
synchronized o modificador synchronized é usado com código multithreaded.
native O modificador native é usado quando interagimos com códigos escritos em outra linguagem, como por exemplo, C++.
strictfp O modificador strictfp é usado para fazer cálculos portáteis de ponto flutuante.
Novamente, agora, apenas focando em sintaxe. Você sabe por que esses códigos compilam ou não compilam?
O método walk1() é uma declaração válida sem especificador opcional. Isto está ok - afinal ele é opcional. O método walk2() é uma declaração válida, com final como especificador opcional. Os métodos walk3() e walk4() são declarações válidas com ambos static e final como especificadores opcionais. A ordem destes especificadores não importa. O método walk5() não compila porque modifier não é um especificador opcional válido. O método walk6() não compila porque o specificador opcional está declarado depois do tipo de retorno. O método walk7() compila. É estranho, mas o Java permite o especificador opcional aparecer antes do modificador de acesso.
Tipo de Retorno
O próximo item em uma declaração de método é o tipo de retorno. O tipo de retorno pode ser um tipo Java real, como String ou int. Se não houver nenhum tipo de retorno, a palavra-chave void será usada. Este tipo de retorno especial vem do idioma inglês: void e significa sem conteúdo. Em Java, não há nenhum tipo lá.
Ao verificar os tipos de retorno, você também deve olhar dentro do corpo do método. Métodos com um tipo de retorno diferente de void são obrigados a ter uma declaração de retorno dentro do corpo do método. Essa instrução de retorno deve incluir a primitiva ou o objeto a ser retornado. Métodos que possuem um tipo de retorno void podem ter uma instrução return sem valor retornado ou podem omitir totalmente a instrução return.
Pronto para alguns exemplos? Você pode explicar por que esses métodos compilam ou não?
Como o tipo de retorno do método walk1() é void, a instrução return é opcional.
O método walk2 () mostra a instrução de retorno opcional que corretamente não retorna nada. O método walk3 () é uma declaração válida com um tipo de retorno String e uma instrução return que retorna uma String. O método walk4 () não compila porque a declaração de retorno está faltando. O método walk5 () não compila porque o tipo de retorno está faltando. O método walk6 () não compila porque tenta usar dois tipos de retornos. Você obtém apenas um tipo de retorno.
O método walk7() é um pouco complicado. Há uma declaração de retorno, mas nem sempre é executada. Se a for 6, a instrução de retorno não será executada. Como a String sempre precisa ser retornada, o compilador reclama. Ao retornar um valor, ele precisa ser atribuível ao tipo de retorno. Imagine que existe uma variável local daquele tipo ao qual foi atribuída antes de ser retornada. Você pode pensar em como adicionar uma linha de código com uma variável local nesses dois métodos?
É um exercício bastante mecânico. Você acabou de adicionar uma linha com uma variável local. O tipo da variável local corresponde ao tipo de retorno do método. Então você retorna essa variável local em vez do valor diretamente:
Isso mostra claramente porque você não pode retornar um primitivo longo em um método que retorna um int. Você não pode colocar um long em uma variável int, então também não pode retorná-lo diretamente.
Nome de Método
Os nomes dos métodos seguem as mesmas regras que praticamos com nomes de variáveis, "Blocos de Construção Java". Para revisar, um identificador pode conter apenas letras, números, $ ou _. Além disso, o primeiro caractere não pode ser um número e palavras reservadas não são permitidas. Finalmente, o único caractere sublinhado não é permitido. Por convenção, os métodos começam com uma letra minúscula, mas não são obrigados a fazê-lo. Vamos dar uma olhada em alguns exemplos:
O método walk1() é uma declaração válida com um nome tradicional. O método 2walk() não compila porque os identificadores não podem começar com números. O método walk3() não compila porque o nome do método está antes do tipo de retorno. O método Walk_$() é uma declaração válida. Embora certamente não seja uma boa prática iniciar um nome de método com letra maiúscula e terminar com pontuação, é legal. O método _ não é permitido, pois consiste em um único sublinhado. A linha final do código não compila porque falta o nome do método.
Lista de Parâmetro
Embora a lista de parâmetros seja obrigatória, ela não precisa conter nenhum parâmetro. Isso significa que você pode ter apenas um par de parênteses vazios após o nome do método, como segue:
void nap() {}
Se você tiver vários parâmetros, separe-os com uma vírgula. Há algumas regras para a lista de parâmetros que você verá quando abordarmos varargs. Por agora, vamos praticar olhando para a declaração do método com parâmetros "regulares":
O método walk1() é uma declaração válida sem nenhum parâmetro. O método walk2() não compila porque faltam os parênteses ao redor da lista de parâmetros. O método walk3 () é uma declaração válida com um parâmetro. O método walk4() não compila porque os parâmetros são separados por um ponto e vírgula em vez de uma vírgula. Ponto e vírgula são para separar instruções, não para listas de parâmetros. O método walk5() é uma declaração válida com dois parâmetros.
Lista de Exceções Opcionais
Em Java, o código pode indicar que algo deu errado lançando uma exceção. Por enquanto, você só precisa saber que é opcional e onde na declaração do método vai ser presente. Por exemplo, InterruptedException é um tipo de Exceção. Você pode listar quantos tipos de exceções quiser nesta cláusula separados por vírgulas. Aqui está um exemplo:
Você pode estar se perguntando o que os métodos fazem com essas exceções. O método de chamada pode lançar as mesmas exceções ou tratá-las.
Corpo do Método
A parte final de uma declaração de método é o corpo do método (exceto para métodos abstratos e interfaces, mas você não precisa saber sobre nenhuma delas ainda). Um corpo de método é simplesmente um bloco de código. Possui chaves que contém zero ou mais instruções Java. Nós passamos vários capítulos examinando as instruções Java até agora, então você deve achar fácil descobrir por que estes compilam ou não:
public void walk1() {}
public void walk2() // Não compila
public void walk3 (int a) { int name = 5; }
O método walk1() é uma declaração válida com um corpo de método vazio. O walk2(), o método não compila porque faltam as chaves ao redor do corpo do método vazio.
O método walk3 () é uma declaração válida com uma instrução no corpo do método.
Você passou pelo básico da identificação de declarações de método corretas e incorretas.
Agora você pode se aprofundar em mais detalhes.
A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.