Um trecho de palestra com um mentor como parte do curso Codegym University. Inscreva-se no curso completo.


"Saudações, Amigo! Ouvi dizer que você já tem uma boa compreensão dos métodos?"

"Oi, Rishi. Sim, eu já consegui passar pelo truque do professor. Eu diria que não foi tão ruim, mas você vai me dizer: 'Não, não! Você não descobriu nada. '"

"Você claramente está gastando muito tempo conversando com certos professores, provavelmente com Diego. Enfim... Ainda espero que você entenda os métodos bem o suficiente. Afinal, hoje vou ensinar algumas palavras mágicas que ajudam a delinear métodos ' esferas de influência."

"Parece intrigante."

"Na verdade, é tudo simples. Antes de cada método, os programadores podem especificar os chamados modificadores de acesso. Isso inclui as seguintes palavras-chave: public, protected, private.

"Esses modificadores de acesso permitem restringir o acesso de outras classes a um método.

"Por exemplo, se você escrever a privatepalavra-chave antes de uma declaração de método, o método só poderá ser chamado da mesma classe em que foi declarado. A publicpalavra-chave permite acesso ao método marcado de qualquer método de qualquer classe.

Há um total de 3 desses modificadores, mas há 4 tipos de acesso a um método. Isso ocorre porque a ausência de um modificador de acesso também significa algo. Aqui está uma tabela completa:

Acesso de...
Modificadores qualquer classe classe infantil seu pacote sua classe
public Sim Sim Sim Sim
protected Não Sim Sim Sim
sem modificador Não Não Sim Sim
private Não Não Não Sim

"E aqui está uma explicação completa dos modificadores de acesso:

1. publicmodificador

Um método (ou variável ou classe) marcado com o publicmodificador pode ser acessado de qualquer lugar no programa . Este é o mais alto grau de abertura - não há restrições.

2. privatemodificador

Um método (ou variável, ou classe) marcado com o privatemodificador só pode ser acessado a partir da mesma classe onde foi declarado . Para todas as outras classes, o método marcado (ou variável) é invisível. É como se não existisse. Este é o nível mais alto de restrição - apenas sua própria classe.

3. Sem modificador (modificador padrão)

Se um método (ou variável) não estiver marcado com nenhum modificador, então é considerado como tendo o 'modificador padrão'. Variáveis ​​ou métodos com esse modificador (ou seja, sem nenhum) são visíveis para todas as classes no pacote em que são declaradas . E só a eles. Às vezes, esse modificador também é chamado package-private, sugerindo que o acesso a variáveis ​​e métodos é aberto a todo o pacote no qual sua classe está localizada.

4. protectedmodificador

Se um método for marcado com o protectedmodificador, ele poderá ser acessado a partir da mesma classe, do mesmo pacote e descendentes (classes que herdam a classe na qual o método é declarado). Analisaremos esse tópico com mais detalhes na missão Java Core."

"Interessante, mas não tenho certeza se posso colocar imediatamente esses modificadores nos lugares certos.

"Você chegará lá gradualmente. Não precisa se preocupar com antecedência. Até chegar ao final da missão Java Syntax, você pode usar o publicmodificador em todos os seus métodos (assim como classes e variáveis ​​de instância). Você precisará do outros modificadores quando começamos a aprender OOP ativamente."

"Você pode explicar com mais detalhes por que os modificadores de acesso são necessários?"

"Eles se tornam necessários para grandes projetos escritos por dezenas e centenas de programadores ao mesmo tempo.

"Às vezes, há situações em que um programador deseja dividir um método excessivamente grande em partes e mover parte do código para métodos auxiliares. Mas, ao mesmo tempo, ele ou ela não deseja que outros programadores chamem esses métodos auxiliares, porque o código correspondente pode não funcionar corretamente."

"Então eles criaram esses modificadores de acesso. Se você marcar um método auxiliar com a palavra private , nenhum código além de sua classe poderá ver seu método auxiliar."

"Eu acho que entendi."

staticpalavra-chave

"Há outra palavra-chave interessante. É static. Sem surpresa, ela torna os métodos estáticos."

"O que isso significa?"

"Falarei mais sobre isso mais tarde. Não se preocupe. Por enquanto, apenas tente se lembrar de alguns fatos sobre métodos estáticos.

Fato 1. Um método estático não é anexado a nenhum objeto, mas pertence à classe na qual é declarado. Para chamar um método estático, você precisa escrever:

ClassName.MethodName()

Exemplos de métodos estáticos:

Nome da classe Nome do método estático
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

O nome da classe antes do nome de um método estático pode ser omitido se você chamar o método estático de dentro de sua classe. É por isso que você não precisa escrever Solutionantes dos nomes de cada um dos métodos estáticos que são chamados.

Fato 2. Um método estático não pode acessar os métodos não estáticos de sua própria classe. Um método estático só pode acessar métodos estáticos. Como resultado, declaramos todos os métodos que queremos chamar do mainmétodo estático."

"Por que é que?"

"Você mesmo responderá a essa pergunta quando começar a aprender OOP e entender como os métodos estáticos funcionam. Até então, apenas confie em mim.

throwspalavra-chave

"Existe outra palavra-chave que você provavelmente já viu em uma declaração de método — a throwspalavra-chave. Ao contrário dos modificadores de acesso e da staticpalavra-chave, esta palavra-chave é colocada após os parâmetros do método:

public static Type name(parameters) throws Exception
{
  method body
}

"E o que isto quer dizer?"

"Mais uma vez, devo dizer que você aprenderá seu verdadeiro propósito mais tarde, quando estudarmos as exceções (no nível 15).

Mas, para tocar superficialmente, podemos dizer que um método marcado com a throwspalavra-chave pode gerar erros (exceções), ou seja, instâncias da Exceptionclasse (e classes que a herdam). Se vários tipos diferentes de erros podem ocorrer em uma aula, você precisa listar cada um deles separados por vírgulas."

"Parece misterioso e incompreensível! Vou ter que esperar pelo nível 14."

método principal

"Vamos agora dar uma olhada no método main. Você já entendeu que a linha onde um método é declarado, que contém todos os modificadores, afetará como esse método é chamado de outras classes e métodos. Além disso, afeta o tipo de resultado que o método retornará e indica quais erros são possíveis durante a execução.

"Essa linha é chamada de declaração de método e tem o seguinte formato geral:

access modifier static Type name(parameters) throws exceptions
Formato geral de uma declaração de método

Onde access modifiersé substituído por public, protected, privateou nada;

se o método for estático, a staticpalavra-chave aparecerá (está ausente para métodos não estáticos)

Typeé o tipo do valor de retorno ( voidse não houver resultado)

"Agora você tem uma compreensão muito melhor do que todas essas palavras significam na declaração do mainmétodo:

public static void main(String[] args) throws Exception
Declarando o mainmétodo

"Bem, agora percebo que o acesso ao main()método é possível a partir de qualquer classe, conforme indicado pela publicpalavra-chave. O método é estático, portanto pode ser chamado explicitamente como Solution.main()."

"Qual resultado o main()método retorna?"

"Nenhuma! O tipo de resultado é void. É como um tipo vazio, um espaço reservado."

"O que main()tem entre parênteses?"

"Hmm... Acontece que o mainmétodo aceita argumentos (!). Eles são passados ​​como um array de strings."

"Isso mesmo. E o nome do parâmetro argssugere 'argumentos' para nossas mentes. Quando o programa inicia, você pode passar argumentos - um array de strings. Eles estarão contidos no argsarray do main()método."

"Uau! Eu me perguntei sobre isso quando vi pela primeira vez, mas depois me acostumei e comecei a escrever a lista de parâmetros sem pensar."

"Todos nós já passamos por isso. Finalmente, erros não tratados como Exception(ou seus descendentes) podem ocorrer no main()método. Sabemos disso graças à throws Exceptionparte da declaração."

"Obrigado, Rishi. Eu não entendi tudo, mas isso foi interessante."

"De nada. Aos poucos você vai entender todos esses pontos sutis, tenho certeza."