Erro de non-static method

4 respostas
D
Comecei a tentar aprender java hoje, e  me deparei com esse erro no programa abaixo.

Alguem pode me ajudar ?

public class mais_erros

{

int primeiraIdade;

int segundaIdade;

public void somaIdades (){

System.out.println("A soma das idades é: " + (primeiraIdade + segundaIdade) );

}

public static void main (String[] args)

{

// Esta chamada de metodo ira imprimir a soma das idades na tela.

somaIdades();

}

}

4 Respostas

T

Dê uma lida nos conceitos de java, isso é que mata muitos programadores iniciantes.
Por exemplo, nome de classes são sempre com a
primeira letra em maiúsculo, no seu exemplo seria MaisErros.

variáveis de classe são sempre são inicializadas com valores padrões, no seu caso primeiraIdade e segundaIdade teriam o valor zero.

O método main, é um método static, e estava chamando um método não static, logo ele precisa acessar de uma maneira statica ( ou cria-se um objeto da sua classe, ou muda-se o metodo somaIdades para static)

Tente o código abaixo que deve funcionar.

public class mais_erros
{
int primeiraIdade;
int segundaIdade;
public void somaIdades (){
System.out.println("A soma das idades é: " + (primeiraIdade + segundaIdade) );
}
public static void main (String[] args)
{
// Esta chamada de metodo ira imprimir a soma das idades na tela.
mais_erros m = new mais_erros();
m.somaIdades();
}
}
D

Valeu pela dica Thiago.

Porem continuo sem entender o porque eu estava chamando o metodo como não statico?

M

depois da explicacao do cara, merecida de 5*, vc nao merecia mais explicacao mas eu vou tentar…

vc estava chamando de forma static porque vc nao instanciou um objeto dessa classe, para so depois chamar o metodo. Vc ta chamando direto, sem instanciar. Pra corrigir ou vc faz o que te falou ou coloca um static antes do nome do metodo.

P

Metodo estático (definido com a palavra reservada static)

nome_da_classe.nome_do_método();

Metodo não-estático

INSTÂNCIA_da_classe.nome_do_método();

Agora veja os exemplos:

public class Teste {
	
	static public void metodo1(){System.out.println(1);}

	static public void metodo2(){System.out.println(2);}

	public void metodo3(){System.out.println(3);}

	public void metodo4(){System.out.println(4);}

	public static void main(String[] args) {
		Teste t = new Teste();
		// metodos static
		t.metodo1();      // ok mas gera warning,
		t.metodo2();      // ok mas gera warning,
		Teste.metodo1();  // agora sim, ok e bonito :)
		Teste.metodo2();  // agora sim, ok e bonito :)
		// metodos não-static		
		t.metodo3();     // ok
		t.metodo4();     // ok
		Teste.metodo3(); /* Erro: Cannot make a static reference to the non-static */
		Teste.metodo4(); /* method metodo1() from the type Teste */
	}
	
}

dentro de metodos:

public class Teste {
	
	// metodo estatico 
	static public void metodo1(){
		System.out.println(1);
	}

	// metodo não-estatico 
	public void metodo2(){
		System.out.println(2);
	}

	// reconheceu ?
	static public void metodo3(){
		metodo1();        // chamando outro estatico
		Teste.metodo1();  // forma completa
		metodo2();        /* Erro: Cannot make a static reference to the     */  	
		this.metodo2();	  /* non-static method metodo2() from the type Teste */
		
		/* sem falar q não se usa this no contexto estatico
		 * por que sera? pesquise sobre isso... */
		
		/* testando com a instancia da classe*/
		Teste t = new Teste();
		t.metodo2();      // agora sim (!)
	}
	
	// reconheceu ?
	public void metodo4(){
		metodo1();        // metodo estatico
		Teste.metodo1();  // forma completa 
		metodo2();        // metodo nao estatico
		this.metodo2();	  // a partir da referência 'this'	 
	}	
}

Boa sorte...

Criado 23 de maio de 2006
Ultima resposta 23 de mai. de 2006
Respostas 4
Participantes 4