Vamos aprender nesta aula de nosso curso online de Java os dois métodos mais usados pelos programadores Java: os getters e setters.
O que são e para que servem os métodos get e set
Eles servem para pegarmos informações de variáveis da classe que são definidas como 'private', porém esses método são definidos como 'public'.
Daí surge uma pergunta natural: por que criar métodos para acessar variáveis, se podemos acessar elas diretamente?
Simples: questão de segurança.
As variáveis 'private' só podem ser acessadas de dentro da Classe. É como se elas fossem invisíveis foram do escopo da classe/objeto. Assim, evitamos que outros métodos, classes ou hackers tenham acesso aos dados de determinada classe, que muitas vezes podem ser dados privados, como é caso de aplicações para empresas e bancos.
Como tratar, então, essas variáveis?
Aí que entra a questão dos métodos. Vamos permitir o acesso a essas variáveis, claro (senão não haveria sentido em usar esses atributos).
Porém, vamos ter um total controle sobre essas variáveis através dos métodos.
Por exemplo: suponha que você tenha que criar uma aplicação para um banco, onde vai limitar o número de saques de um cliente.
Os valores do saldo desse cliente ficarão armazenados na variável 'saldo'. Se você der acesso total a essa variável, o cliente poderia usar de forma descontrolada os serviços do banco.
Porém, podemos criar um método em que, cada vez que o cliente saque dinheiro ele ative um contador:
public void setSaque(double valor){
saldo -= valor;
contador++;
}
Nesse trecho de código, quando o usuário tenta sacar, através do menu do caixa eletrônico, ele vai para o método 'saque()'.
Então cada vez que ele saca, seu saldo diminui em 'valor' e um contador (que é uma variável da classe) é incrementado. É impossível fugir desse método!
Sacou? O contador roda! Sempre!
Sabemos que temos um limite diário de saque, vamos supor que seja três. Então vamos limitar o número de saques:
public void setSaque(double valor){
if(contador <=3){
saldo -= valor;
contador++;
} else {
System.out.println("Você atingiu o limite de saques diários");
}
}
Pronto. Se você sacar 3x, o contador terá valor 4 (supondo que seu valor inicial seja 1), e agora é impossível ele sacar mais, pois sempre vai cair no else.
No próximo artigo criaremos uma aplicação que simula um banco.
Como usar os métodos get e set
Usamos get para obter informações. Esse tipo de método sempre retorna um valor.Usamos set para definir valores. Esse tipo de método geralmente não retorna valores.
Usando o exemplo da classe "Funcionario", do artigo passado sobre this e uso de métodos em Classe e Objetos, temos o código:
getSet.java
public class getSet{ public static void main(String[] args){ String nome = "Neil Peart"; int ID=2112; double salario = 1000000; Funcionario chefe = new Funcionario(); chefe.setNome(nome); chefe.setID(ID); chefe.setSalario(salario); chefe.exibir(); } }
Funcionario.java
public class Funcionario { private String nome; private int ID; private double salario; public void exibir(){ System.out.printf("O funcionário %s, de número %d recebe %.2f por mês", getNome(),getID(),getSalario()); } public void setNome( String nome ){ this.nome = nome; } public void setID( int ID ){ this.ID = ID; } public void setSalario( double salario ){ this.salario = salario; } public String getNome(){ return this.nome; } public int getID(){ return this.ID; } public double getSalario(){ return this.salario; } }
Como invocar métodos de dentro do construtor
Outra maneira de inicializarmos as variáveis de um Objeto, é usando os métodos 'set', direto do construtor:setGet.java
public class setGet{ public static void main(String[] args){ String nome = "Neil Peart"; int ID=2112; double salario = 1000000; Funcionario chefe = new Funcionario(nome, ID, salario); chefe.exibir(); } }
Funcionario.java
public class Funcionario { private String nome; private int ID; private double salario; public Funcionario( String nome, int ID, double salario){ setNome(nome); setID(ID); setSalario(salario); } public void exibir(){ System.out.printf("O funcionário %s, de número %d recebe %.2f por mês", getNome(),getID(),getSalario()); } public void setNome( String nome ){ this.nome = nome; } public void setID( int ID ){ this.ID = ID; } public void setSalario( double salario ){ this.salario = salario; } public String getNome(){ return nome; } public int getID(){ return ID; } public double getSalario(){ return salario; } }
Uso errado do get e set
Qual a diferença entre alterar e pegar o valor de uma variável diretamente (caso ela seja pública), e alterar e pegar o valor dela através de set e get (se ela for privada) ? Não é segurança, já que podemos alterar seu valor como bem quisermos, através dos métodos set.Definir get e set para todas as variáveis, de forma direta, é um exemplo de péssimo hábito de programação. Infelizmente é uma técnica bem comum e muitos programadores, até os mais experientes, cometem esse ato inútil.
Para que servem então? Quando usar?
Só use set e get quando você for fazer algo além de simplesmente mudar o valor de uma variável 'private'.
Lá no começo de nosso tutorial, usamos o exemplo de contador, que limita o número de saques de um cliente a um caixa eletrônico.
Outro exemplo disso, seria em um aplicativo de vendas.
Ao comprar, o método set ou get automaticamente define o valor de desconto ou juros. Assim esse método faz algo mais além do que mudar a variável. Assim, sua aplicação se torna robusta e segura, pois se torna impossível mudar o valor da variável sem que seja alterada o valor do juros ou desconto.
Sempre que seu método set do tipo for:
retorno metodo(tipo valor){
this.nome_da_variavel = valor;
}
Muito provavelmente ele é inútil. Para saber quando usar é simples: use quando for fazer algo além de fornecer valor.
Um exemplo util:
retorno metodo(tipo valor){
this.nome_da_variavel = valor * juros;
};
Vamos treinar!
Exercício: Caixa Eletrônico em Java - Caixa.java
Crie um protótipo de caixa eletrônico em Java. No início, ele pede seu nome e valor $$ inicial que tem na conta. O programa deve fornecer um número de 4 dígitos - número da conta - para o usuário (use Random). Esses dados serão usados para criar um objeto da classe "Conta.java"
A seguir, mostra um menu com as opções (esse menu deverá ser um método):
- Extrato: exibe o nome, número da conta, saldo e quantos saques já foram realizados
- Sacar: recebe o valor a ser sacado, informa se pode ser sacado (não pode ficar negativo) e mostra o saldo
- Depositar: recebe o valor a ser depositado e mostra o novo saldo
- Sair
Esse menu aparece até o usuário escolher sair. As outras opções são métodos que devem fazer parte da "Conta.java" (setters e getters). Note que o usuário pode sacar no máximo 5 vezes por dia.
Solução comentada

