Não é um bicho de sete cabeças! Dominando modificadores, Retornos e Comportamentos

Não é um bicho de sete cabeças! Dominando modificadores, Retornos e Comportamentos

Marco Antônio
Marco Antônio·23 de junho de 2026·Atualizada em: 23 de junho de 2026

Muitos encaram certas palavras de linguagem de programação, durante o início dos estudos em programação como palavras escritas na "Lingua Sombria de Mordor", algo assustador que não deve ser pronunciado ou escrito. Para dar um panorama realmente completo de como o Java funciona debaixo do capô resolvi trazer este texto especial.

Dividindo a linguagem em três grandes blocos, aqui farei uma explicação simples de Modificadores de acesso (quem pode ver), Modificadores de Comportamento (como a estrutura age) e Tipos de Retorno (o que o método devolve ao usuário/dev).

Entendendo o conceito das palavras

Se você já abriu um código Java e se assustou com linhas tais como "public static final void main", respire fundo. Essa sopa de letrinhas não serve para te embananar ou complicar sua vida, mas sim para dar controle para o programador sobre como cada "engrenagem" desta máquina irá funcionar.

Vamos começar a desmitificar a linguagem Java de uma vez. Para isso primeiramente precisamos entender que essas palavras-chave estão divididas em três categorias totalmente diferentes. Vamos colocar todas sob a mesa.

Modificadores de Acesso (Quem pode ver seu código?)

Eles são os "porteiros" do sistema, definem quem pode acessar as variáveis, métodos e classes.

  • Private : Pode ser considerado o nível máximo de segurança, semelhante a um cofre. O que é privado só existe e só pode ser acessado dentro da própria classe onde foi criado. Ninguém de fora consegue ler ou alterar.

  • Padrão / Default : Curiosamente, esse não é uma palavra digitada, mas sim algo automático caso você crie uma variável ou método sem inserir nenhum modificador antes. O Java aplica o acesso Default (Package-private), isso significa que apenas classes que estão dentro do mesmo 'package' (pasta) possam acessá-lo.

  • Protected : Semelhante ao Private, mas bem mais leniente, o protected, permite o acesso para classes do mesmo package, além de também permitir seu uso por classes herdeiras (filhas/subclasses), mesmo que essas estejam em outros packages/pastas dentro do projeto.

  • Public : Variáveis e métodos públicos são totalmente liberados, permitindo que qualquer classe, em qualquer pasta do projeto possa interagir com essa variável ou método.

Modificadores de Comportamento (Como o código age)

Agora iremos explorar os "Não-Modificadores de Acesso" (Non-Acess Modifiers). Eles não interferem em que está "vendo" o código e sim em como a classe, variável ou método vai se comportar na memória ou herança.

  • Static : Normalmente, quando se cria um classe, usemos a classe Carro por exemplo. Cada novo carro que é instanciado através da superclasse Carro, terá sua própria velocidade e cor. Caso utilize o modificador static, aquela variável ou método passa a pertencer à classe inteira e não à um objeto específico.

    Uma outra analogia para este caso seria à de um bebedouro de escritório. Ele não pertence à mesa de nenhum funcionário específico, é compartilhado por todos.

  • final : O Final Bloqueia mudanças:

    Se for em uma variável, ela se tornará uma constante (seu valor nunca mais poderá ser alterado).

    Caso seja um método, nenhuma subclasse poderá sobrescrevê-lo (@Override).

    Se for em uma classe, ela se torna estéril (não pode ter classes filhas herdando dela).

  • Abstract : Pode ser vista como uma planta de um Arquiteto, o método abstract é muito utilizado para classes e métodos. Uma classe Abstract existe apenas como um "rascunho" de uma ideia - você não pode criar objetos a partir dela. Ela serve exclusivamente para que outras classes a herdem e construam o código de verdade. Um método Abstract não tem corpo (lógica de código dentro dele); ele apenas obriga as classes filhas a implementarem aquela ação.

  • Synchronized e Volatile : São usados em sistemas avançados (que possuam múltiplas threads rodando ao mesmo tempo) para evitar que duas partes do sistema tentem alterar a mesma variável ou executar o mesmo método no mesmo milissegundo, evitando que o programa quebre. Podem ser vistos como (Controladores de Tráfego).

Os tipos de Retorno (O que o método devolve?)

Todo método em Java faz um trabalho. Mas a grande pergunta é: quando ele terminar, ele vai entregar algo de volta? Para isso existem os tipos de retorno.

  • Void : Considerado como um trabalho silencioso do código, por ter o significado de "vazio", o método void executa a tarefa dele (como salvar algo no banco de dados ou imprimir uma mensagem na tela) e não devolve nenhuma informação para quem o chamou. Acabou o trabalho, acabou a interação.

  • Tipos Primitivos : Aqui temos os mais comuns tipos utilizados em variáveis (int, double, boolean, char, etc). Se o seu método faz um cálculo matemático, ou, uma verificação lógica, ele não pode ser void. Ele precisa devolver o resultado. Por exemplo, um método que soma dois números terá o retorno int (inteiro) e usará a palavra return no final para devolver este número.

  • Tipos de Referência : Teremos nesta seção os Objetos, Strings e Arrays. O programador também pode fazer com que um método devolva estruturas complexas, por exemplo, um método chamado buscarCliente(), não vai devolver um número, mas sim um objeto completo da classe Cliente(com nome, CPF, Idade, Endereço, etc...)

Evitando pegadinhas técnicas

Um dos grandes riscos e táticas de entrevistadores e provas de certificação Java é a implementação de certas armadilhas feitas para confundir e tirar o desenvolvedor de foco:

  • Construtores : É vital entender que os construtores (blocos de código utilizados para criar um objeto, tais como public Cachorro{}) são uma exceção às regras citadas acima, pois não possuem um tipo de retorno, nem mesmo void. Caso você coloque void em um construtor, o Java passará a tratá-lo como um método comum e o código quebra silenciosamente.

  • Segredo das Interfaces : Outro ponto importante a se notar é que em uma Interface (Um contrato de código no Java), não é preciso digitar public abstract nos métodos. O Java já faz isso por baixo dos panos automaticamente (são implicitos).

  • Modificadores de Nicho (transient e native) : Para não passar batido, é importante notar que o transient diz ao Java para ignorar uma variável na hora de salvar o objeto em um arquivo (serialização), e o native indica que aquele método foi escrito em outra linguagem (C ou C++) e importada para o Java.

É comum no começo se olhar para um código java e ver uma fileira de palavaras como private static final e se sentir intimidado, mas agora você sabe que não se trata de complicação gratuita, mas sim uma maneira de organizar melhor cada função do código. O Java é uma linguagem fortemente tipada e orientada a objetos que preza, acima de tudo pela segurança e pela clareza!

Compartilhar

Sobre o autor

Marco Antônio
Marco Antônio32 anosDev. Full Stack/ Editor Chefe

Desenvolvedor Full Stack Jr. que atuou por anos como analista de games indies e AAA. Editor chefe responsável pela curadoria de artigos para a Mangue House.

Comentários