Como utilizar get e set?

Boa tarde pessoal me desculpem por essa pergunta mas como este indice é para java básico.
Bem, eu quero saber como usar get e set pois leio sobre eles mas não entendo bem!
Algem pode me mandar exemplos práticos? pois acho que só assim eu fixarei o assunto.
Obrigado pela ateção…

Amigo bem pertinente sua pergunta.

Então vou tentar te ajudar.

Procure saber mais sobre Encapsulamento.

Acredito q vc procurando mais sobre esse assunto irá esclarecer muito suas duvidas.

Para te ajudar dá uma lida neste material … ele é muito bom.

Título do post: Como não aprender Java e Orientação a Objetos: getters e setters

Aqui tb tem uma ajudinha básica.
http://www.javafree.org/javabb/viewtopic.jbb?t=997#4085

Caso ainda tenha alguma dúvida grita ae

Falow

T+

Dá uma olhada no blog da Caelum

http://blog.caelum.com.br/2006/09/14/nao-aprender-oo-getters-e-setters/

espero ter ajudado

Olá.
Get e Set são métodos utilizados para ler e setar, respectivamente, o valor de um atributo em uma classe.
Imagine por exemplo uma classe Pessoa :

public class Pessoa {
  private Long   id;
  private String nome;


  public Long getId() {
     return this.id;
  }

  public String getNome() {
    return this.nome;
  }

  public void setId (Long id) {
    this.id = id;
  }

  public void setNome (String nome) {
    this.nome = nome;
  }

}

Desta maneira, os atributos da classe se mantêm privados, e toda alteração/leitura dos valores, ficam centralizadas nos métodos get e set.
Muitos frameWorks como o Hibernate, o Spring, entre outros, utilizam estes métodos (que devem existir obrigatoriamente na classes), para setar/ler os valores quando necessários.

Isto é que são métodos Get e Set.
É prática comum toda a classe bean/pojo possuir métodos Get/Set.

Esclareceu suas dúvidas ?

Abraço.

Cara isso é chamado de Getters / Setters, são utilizado para que se possa manter o encapsulamento da classe, pois se você permitir o acesso public a um atributo não existira encapsulamento na sua classe, causando n problemas que não vem ao caso.

Os Getters / Settes são criados para todos os atributos que você julgue necessário?

  • getter:
public tipoDeRetorno getNomeDoAtributo()
{
     return x;
}
  • setter:
public void setNomeDoAtributo(tipoDoParametro nomeDoParametro)
{
     this.NomeDoAtributo = nomeDoParametro;
}

Espero que ajude.

[]s

Olá, Jdkarlos! Bem vindo ao Guj!
Não há muito mistério a respeito dos getters e setters…
O que vc deve ter em mente é o seguinte: A importância dos campos de uma classe serem privados.
Uma classe que tenha campos públicos, com livre acesso, pode trazer problemas. Imagine uma classe como a seguir:

public class Time {
	public int 
		hour, 
		minute, 
		second
	;
	
	public String toString(){
		return hour + ":" + minute + ":" + second;
	}
}

Uma classe bem básica para representar o tempo. Veja que os campos dessa classe são todos públicos. Isto quer dizer que qualquer outra classe pode ler e, principalmente, escrever “o diabo” nessas variáveis.
Onde eu quero chegar? Me diga: O que impede de vir um cidadão e criar um objeto que represente o esdrúxulo horário “27:85:-523”??? :shock:
Eu te digo: NADA!!! :twisted: Veja:

public class TestTime01 {
	public static void main(String[] args) {
		Time time = new Time();
		time.hour = 27;
		time.minute = 85;
		time.second = -523;
		
		System.out.println("Horário de Brasília: " + time.toString());
	}
}

Execute essa joça e veja que lindo!!!
De que forma podemos evitar que o cidadão que vá utilizar nossa classe Time crie um objeto inconsistente, como o que foi criado acima???
Uma alternativa seria adotar o seguinte conjunto de medidas:
:arrow: Bloquear o acesso direto aos campos, declarando-os private
:arrow: Prover, para cada campo, um método que retorne o valor do campo (leitura) e outro método que altere o valor do campo (escrita)
:arrow: Implementar o método de escrita, de forma a se evitar que um objeto da classe se encontre em um estado inconsistente. Ou seja, verificar se o novo valor a ser atribuído ao campo é um valor válido.

Este terceiro passo, pode ser encarado como definir o domínio de valores válidos para cada campo. O respeito a este domínio deve ser assegurado pelo método de escrita correspondente.
Há uma convenção a respeito da nomenclatura destes métodos de leitura e de escrita dos campos da classe. Os métodos de leitura têm seu nome formado pela palavra get seguido do nome do campo, com sua primeira letra maíuscula. Os métodos de escrita, a mesma coisa, só que ao invés de get, usamos set. Por exemplo: Se uma classe tem um campo chamado “nomeCliente”, do tipo String, um exemplo de métodos get e set correspondentes seriam

public String getNomeCliente(){
   return nomeCliente;
}

public void setNomeCliente(String nomeCliente){
   this.nomeCliente = nomeCliente;
}

Esse é o exemplo mais simples possível de um get e um set para um campo de uma classe.
Vamos aplicar os getters e setters à classe Time:

public class Time {
	private int 
		hour, 
		minute, 
		second
	;
	
	public int getHour() {
		return hour;
	}

	public int getMinute() {
		return minute;
	}

	public int getSecond() {
		return second;
	}

	public void setHour(int hour) {
		if(hour < 0 || hour > 23)
			this.hour = 0;
		else
			this.hour = hour;
	}

	public void setMinute(int minute) {
		if(minute < 0 || minute > 59)
			this.minute = 0;
		else
			this.minute = minute;
	}

	public void setSecond(int second) {
		if(second < 0 || second > 59)
			this.second = 0;
		else
			this.second = second;
	}

	public String toString(){
		return hour + ":" + minute + ":" + second;
	}
}

Com essa nova versão da classe Time, tente executar aquele programa infame que mostrava na tela aquele horário de Brasília esdrúxulo. Vai dar pau, porque as classes externas a Time não têm mais acesso direto aos campos. Tente esta aqui:

public class TestTime02 {
	public static void main(String[] args) {
		Time time = new Time();
		time.setHour(27);
		time.setMinute(85);
		time.setSecond(-523);
		
		System.out.println("Horário de Brasília: " + time.toString());
	}
}

Ao executá-la, você perceberá que, mesmo que o cidadão tentou entrar com valores inconsistentes através dos setters, foi impresso na tela um horário consistente, válido.
Isto se deve ao fato de os setters da classe Time estarem corrigindo eventuais valores errôneos. Veja, por exemplo, o setHour(). Se o parâmetro informado estiver fora da faixa válida para uma “hora”, ou seja, fora de 0 a 23, o próprio setHour() altera o valor do campo para zero, que é um valor válido.

Consegue perceber agora uma útilidade bem básica para os getters e para os setters?
Caso esteja curioso para saber de outras utilidades, procure ler um pouco mais sobre “JavaBeans”
Divirta-se!

4 curtidas

[size=24][size=24]Obrigado a todos depois de todas estas dicas “Acabo de me formar doutor em get’s e set’s valew a ajuda de todos e os exemplos…”[/size][/size]

bom vamos la deixo eu ver se posso ti ajudar…

public class Test{
public static void main(String args[]){

int num;

//configuro minha variavel num que vai receber o valor de n
public void setNum(int n){
num = n;
}
// ai em cima ela apenas recebe o valor passando do argumento do metodo mais nada

//agora aqui tem o seguinte
public int getNum(){
return num;
}
//ai em cima eu tenho um tipo de return da variavel num ou seja caso vc quera imprimir o valor de num basta chamar o metodo...
assim
System.out.println("resultado" + getNum());
}
}

bom parceiro e vc ta se perguntando no é mais facil eu imprimir direto com a variavel? bom… continue estudando e vc verá qual eh o melhor caminho a ser tomado tente vc mesmo descobrir para entender a essencia da coisa… espero ter ajudado…

Mantu, obrigado e parabéns. Você sabe muito e o melhor: explica muito bem. Já li diversos posts seus aqui no fórum e estou impressionado.

Parabéns MESMO!

Prezado colega…

Como a maioria do pessoal lhe falou get e set são padrões, convensões para utilização, get (são acessores, acessão as variáveis, ex. getNome(), retorna o nome, getSalario(), retorna o salário e set, são modificadores, ex: setNome(String nome) você pode alterar o nome assim como SetSalario(double salario) altera o salario.

public String getNome()//retorna o nome
{
return this.nome;
}

public void setNome(String nome)//altera o nome
{
this.nome = nome;
}

//dentro do main voce instancia um objeto de uma classe que contenha esse campo e chama os metodos, vamos supor que voce tenha uma referencia x.

x.getNome(); // vai te retornar o nome

x.setNome(String nome"coloque aqui o nome novo")// vai alterar o nome

perfeita explicacao do Mantu! mas vale lembrar que voce nao precisa prover os metodos de leitura e escrita se nao fizerem sentido na sua classe!!! nao eh regra, eh apenas usado se voce precisar.

Ola!
Como q eu passo um vetor de string no metodo set?

tipo : obj.setNomes( ''strings do vetor "); ?

Simples

String[] nomes = new String[2];
nomes[0] = "thiago";
nomes[1] = "corrêa";
obj.setNomes(nomes);

Ae Galera não querendo rescussitar o tópico, mais eu achei por Obrigação comentar aqui a explicação do Matu,
valew mesmo, Agora eu intendi esse Trem hehe :lol:

Ae Galera não querendo rescussitar o tópico, mais eu achei por Obrigação Agradecer ao Mantu por essa explicação

os metodos get e sets são para vc poder ter acesso ao atributo criado!

podendo recuperar o valor desse atributo atraves do metodo get e modificar o atributo atraves do set.

[quote=Paulo Silveira][quote=Mantu]
:arrow: Prover, para cada campo, um método que retorne o valor do campo (leitura) e outro método que altere o valor do campo (escrita)
[/quote]

perfeita explicacao do Mantu! mas vale lembrar que voce nao precisa prover os metodos de leitura e escrita se nao fizerem sentido na sua classe!!! nao eh regra, eh apenas usado se voce precisar.[/quote]

E somando essas 2 explicacoes vc tera encapsulamento de verdade.
Porque de nada adianta ter 10 atributos, se vc tem 10 gets e 10 sets publicos. Sua classe está totalmente exposta.
Mantenha o que é de conhecimento interno da classe, visível apenas pra ela mesma.

fecha o topico amigo se seu problema foi resolvido.

;D