Comecei a tentar aprender java hoje, e já 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();
}
}
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();
}
}
Valeu pela dica Thiago.
Porem continuo sem entender o porque eu estava chamando o metodo como não statico?
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.
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:
[code]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 */
}
}[/code]
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…