Variaveis de instancia como parametro

2 respostas
C
Tou aqui confuso nas variaveis de instancia quando sao passadas como parametro.

o Codigo é o seguinte

public class teste {

public int valor;
public class parametros{

public static void met(teste a, teste b) {

int tmp = a.valor;

a.valor = b.valor;

b.valor = tmp; }}}

Quero fazer o seguinte ouput.:
teste t = new teste(), w = new teste();

t.valor = 10; w.valor = 20;

System.out.println( “t=” + t.valor + " w=" + w.valor );

parametros.met(t, w);

System.out.println( “t=” + t.valor + " w=" + w.valor );

Queria saber se a minha explicaçao é a correta.
Começa se criar 2 objectos do tipo teste e associar esses objectos à variavel de instancia,é feito o output dessas variaveis e de seguida é chamado o metodo met da classe parametros.
Esse metodo vai igualar a variavel tmp à variavel de instancia “a”, “b” a “a” e “b” a “tmp”
O output depois irá ser da variavel de isntancia associado ao objecto e qu eirá ser t=20 e w=10,pois a svariaveis foram alteradas no metodo.

Estarei correcto com esta explicaçao ou a baralhar tudo? XD

2 Respostas

C

Sim voce explicou bastante bem,vlw pela ajuda :wink:

Luiz_Rocha

Saudações.

Cara… teu código tá confuso, mas eu acho que tô entendendo a tua dúvida.
Então deixe-me, humildemente, refazer alguns pontos:

/*sempre nomeie suas classes com letra maiuscula, assim podemos
 *identifica-la.
 */
public class Teste{
	
	public int valor;
}
/*Nao e recomendado colocar uma classe dentro da outra.
 *Caso voce ainda queira, estude sobre classes internas (inner classes)
 */

/* Soh pode haver 1 classe publica por arquivo, e ela deve ter o 
 * nome desse arquivo.
 */
 
class Main{
	public static void main(String grass[]){
		Teste x=new Teste(), y=new Teste();
		x.valor=1;
		y.valor=2;
		System.out.println("x: "+x.valor+" - y: "+y.valor);
		
		Parametros.met(x,y);
		
		System.out.println("x: "+x.valor+" - y: "+y.valor);
		
	}
}
 
class Parametros{
	
	//Voce ja deve saber que metodos estaticos podem ser chamados
	//direto da classe, sem precisar instanciar Parametros.
	public static void met(Teste a, Teste b){
		//atribuimos a uma variavel local o valor contido em "valor" de b
		int tmp=a.valor;
		
		//atribuimos ao atributo "valor" de a o valor contido em "valor" de b
		a.valor=b.valor;
		
		//atribuimos ao atributo "valor" de a o valor contido em "valor" de b
		b.valor=tmp;
		
		/*Mesmo estando num metodo separado, a troca eh realizada com sucesso,
		 *pois "a" e "b" nao sao meras copias de x e y, mas na verdade apontam
		 *para esses objetos, que foram instanciados em algum lugar (no caso, 
		 *nosso metodo main). Isto é, "a" e "b" apenas apontam para
		 *posicoes de memoria na Memoria RAM, onde estao os verdadeiros objetos.
		 *Assim, os atributos desses verdadeiros objetos sao modificados.
                 *Similarmente, se voce colocar no metodo main Teste z = x, nao estara criando uma
                 *terceira instancia da classe teste, mas uma terceira variavel que aponta para a mesma
                 *instancia de x.
		 */
	}
	
	/*Mas se voce usasse esse metodo em vez do outro nao haveria alteracoes 
	 *nos atributos de x e y, pois aqui mexemos apenas com variaveis locais.
	 */ 
	public static void met(int a, int b){
		int tmp=a;
		a=b;
		b=tmp;
	}
	
}

Então, apesar da tua incerteza, eu acho que, de certo modo, tu ta certo.

Criado 21 de dezembro de 2007
Ultima resposta 21 de dez. de 2007
Respostas 2
Participantes 2