definição = funções definidas dentro de uma classe que descrevem as ações ou comportamentos que o objeto pode realizar
propósito = manipular os atributos e executar operações relacionadas ao objeto
declaração
um modificador de acesso
um tipo de retorno - ou void se não retornar nada
nome do método
parâmetros, se houver
corpo do método
publicclassCarro{// Método da classe Carro para exibir informaçõesvoidexibirInformacoes(){System.out.println("Marca: "+marca);System.out.println("Modelo: "+modelo);System.out.println("Ano: "+ano);}}
Tipos de métodos
métodos de instância = dependem de uma instância específica (objeto) da classe para serem chamados
exemplo = `meuCarro.exibirInformacoes();
métodos estáticos = pertencem à classe, não a uma instância específica, e podem ser chamados sem criar um objeto usando a palavra-chave static
modificadores de acesso = em Java, controlam a visibilidade e a acessibilidade de classes, atributos, métodos e construtores
os modificadores de acesso controlam quem pode acessar o membro
Eles permitem restringir ou liberar o acesso a determinadas partes do código, ajudando a proteger a integridade dos dados e promovendo o encapsulamento
aplicáveis a atributos e métodos
Java - quatro principais modificadores de acesso
public = acessível de qualquer lugar do código, em qualquer classe ou pacote
maior visibilidade
private = acessível apenas dentro da própria classe onde é declarado
menor visibilidade
ideal para dados sensíveis
protected = acessível apenas dentro do mesmo pacote e por subclasses, mesmo que estejam em pacotes diferentes
visibilidade meio-termo
default (ou package-private) = ausência de modificador específico. Acessível apenas dentro do mesmo pacote.
packageacesso;publicclassExemplo{publicintpublicVar;// Acessível de qualquer classeprivateintprivateVar;// Acessível apenas dentro de ExemploprotectedintprotectedVar;// Acessível em subclasses e no mesmo pacoteintdefaultVar;// Acessível no pacote acesso}
modificadores não acessíveis = usados para definir características específicas de classes, métodos e atributos em Java, sem alterar sua visibilidade
usados para definir comportamentos específicos da classe/atributo/método, mas não afetam a visibilidade no código
exemplos de comportamentos
imutabilidade
compartilhamento entre instâncias
exigência de implementação
podem ser combinados com modificadores de acesso
Modificador
Aplicável a
Descrição
final
Classe, método, atributo
Torna a classe não extensível (sem subclasses), o método não sobrescrevível e o atributo constante (imutável). Usado para evitar mudanças.
static
Método, atributo
Faz o método ou atributo pertencer à classe em vez de a uma instância. Compartilhado por todas as instâncias.
abstract
Classe, método
Define uma classe como abstrata (não pode ser instanciada) ou um método que deve ser implementado pelas subclasses.
synchronized
Método
Garante que o método pode ser acessado apenas por uma thread por vez, útil para sincronização em multithreading.
volatile
Atributo
Indica que o valor do atributo pode ser alterado por múltiplas threads simultaneamente e garante visibilidade correta.
transient
Atributo
Indica que o atributo não deve ser serializado, ou seja, não será persistido em arquivos serializados.
native
Método
Indica que o método é implementado em outra linguagem de programação, geralmente em C ou C++, fora do Java.
strictfp
Classe, método
Garante que operações de ponto flutuante (float e double) sigam um padrão de precisão, independente da plataforma.
usando o exemplo do static, um atributo static é associado à classe e não aos objetos. Ele existe uma única vez para todas as instâncias da classe
classPessoa{// todos os objetos `Pessoa` terão acesso ao mesmo valor de contatorstaticintcontador=0;Stringnome;Pessoa(Stringnome){this.nome=nome;contador++;// Incrementa o contador sempre que um objeto é criado}}
da mesma forma, um método static também pertence à classe, não a instâncias específicas. Ele pode ser chamado diretamente pela classe, sem precisar de um objeto
métodos static podem ser usados para acessar ou modificar atributos static ou executar operações que não dependem do estado do objeto
não podem acessar diretamente atributos e métodos não estáticos da classe
classCalculadora{staticintsomar(inta,intb){returna+b;}}// Chamada direta sem criar um objetointresultado=Calculadora.somar(2,3);
acesso a membros staticde fora da classe = diretamente pela classe ou por instâncias, mas é recomendado acessar usando o nome da classe para indicar que o membro é compartilhado entre todas as instâncias
// Acessando o atributo static diretamente pela classeSystem.out.println(Pessoa.contador);
já de dentro da classe, os membros static podem ser acessados diretamente, seja em métodos estáticos ou não estáticos.
porém, métodos não estáticos não podem acessar membros estáticos diretamente se estiverem sendo chamados de um contexto estático
sobre o static, algumas observações importante
atributos e métodos estáticos são comuns a todas as instâncias = se um objeto modificar um atributo static, a modificação será refletida para todos os objetos daquela classe
não é possível acessar membros não estáticos de métodos estáticos = métodos estáticos não têm acesso direto ao estado específico de objetos, pois não são vinculados a nenhum objeto em particular
classExemplo{intatributoNaoStatic;// Atributo não estáticostaticintatributoStatic;// Atributo estáticostaticvoidmetodoStatico(){// Não é possível acessar 'atributoNaoStatic' aqui diretamenteatributoStatic=10;// Pode acessar atributo estático}}
Uso comum de static
métodos utilitários = métodos static são frequentemente usados em classes que possuem funções auxiliares, como a classe Math em Java, que contém métodos como Math.pow()
atributos de contagem ou configuração global = atributos static são usados para armazenar informações compartilhadas entre objetos, como contadores ou configurações de aplicação
static e o Garbage Collector = como os membros static pertencem à classe e não às instâncias, eles não são coletados pelo Garbage Collector enquanto a classe estiver carregada na memória
permanecem na memória durante a execução do programa
Atributos de uma classe podem ser declarados fora de qualquer método, mas sempre dentro da classe.
Os atributos de uma classe são usados para armazenar o estado dos objetos.
Métodos podem ser chamados diretamente a partir de outros métodos dentro da mesma classe sem a necessidade de um objeto.
A palavra-chave static em um atributo ou método significa que ele é compartilhado entre todas as instâncias da classe.
Métodos em Java podem retornar valores ou serem do tipo void, caso não retornem nada.
É possível declarar atributos dentro de um método em Java, mas eles não pertencem à classe, apenas ao método em que foram declarados.
O modificador de acesso protected permite que um atributo ou método seja acessado por outras classes no mesmo pacote e por subclasses, mesmo que estejam em pacotes diferentes.
A palavra-chave final em um método significa que ele pode ser sobrescrito em subclasses.
Um método pode ser sobrecarregado, desde que o nome seja o mesmo, mas os tipos ou o número de parâmetros sejam diferentes.
Métodos getter e setter são usados para acessar e modificar os valores de atributos privados em uma classe.
Os atributos de uma classe podem ser acessados diretamente por qualquer outro código fora da classe, se forem declarados como public.
Um atributo de classe (estático) pode ser acessado através de qualquer instância de um objeto da classe, mas é recomendado acessá-lo diretamente pela classe.
Métodos podem ser chamados diretamente sem o uso de um objeto se forem declarados como static.
A sobrecarga de métodos permite a criação de métodos com o mesmo nome, mas com diferentes tipos de retorno.
Em Java, o modificador private pode ser usado em métodos para impedir que sejam acessados fora da classe.