publicclassNumero{privateintnum;publicNumero(intnum){this.num=num;}publicvoidsetNum(intnum){this.num=num;}publicintgetNum(){returnnum;// não é necessário o this}publicstaticvoidmain(String[]args){inta;a=this.num;//int a=this.num; //ver!!Numeron=newNumero(a);// cria um nome Numero com valor 10System.out.println(n.getNum());// imprime o valor de n (10)n.setNum(a);// seta o valor de num para 20System.out.println(n.getNum());// imprime o valor de n (20)}}
Dentro no main temos o:
int a;
a=this.num;
Que quero dizer com estas 2 linhas, que o a guarda o valor da variavel de instancia num, certo? Assim valores alterados pelo utilizador ficarao no num, que por sua vez fica no a, certo?
A ideia é ao excutar a main imprimir os valores mudados pelo utilizador.
Dá erro na linha a=this.num;
Simples: o método main é de contexto estático (static)
Explicação: uma classe pode ter atributos e métodos estáticos, isso significa que podem ser acessados diretamente, sem precisar instanciar um objeto para isso. Dentro do contexto estático a palavra reservada this não faz sentido, pois o this é um ponteiro para a instancia atual da classe. Como não há instancia…
Por que precisamos de método estáticos? Imagina criar um objeto pra tudo! Pra imprimir, pra calcular o cosseno, etc… não precisa. Pra que ter 58769348 objetos no mesmo programa acessando o mesmo código repetidamente? Tcharam, métodos estáticos.
Math.cos(0.0); // acessa a classe Math diretamente
System.out.println(“hello o mundo”); /* a classe System possui um PrintStream estatico chamado out – que possui um método chamado println() */
Sacou?
Deh
Exception in thread “main” java.lang.Error: Unresolved compilation problem: Cannot use this in a static context
atNumero.main(Numero.java:23)
Ou seja, não se pode usar this em um contexto estático =p
diego2005
Complementado o que os amigos falaram, static significa que o atributo pertence a classe e não a uma instância específica, por exemplo:
Entendi mais ou menos!
Retirei o static da main e ja compila, mas se quiser correr a main n consigo!
Fica assim pra compilar:
publicclassNumero{privateintnum;publicNumero(intnum){this.num=num;}publicvoidsetNum(intnum){this.num=num;}publicintgetNum(){returnnum;// não é necessário o this}publicvoidmain(String[]args)//sai o static{//int a=getNum();//a=(this.num);inta=this.num;//ver!!Numeron=newNumero(num);// System.out.println(n.getNum());// n.setNum(num);// System.out.println(n.getNum());// }}
Compila, mas se invocar o metodo main nao aparece nada!
A questao é como posso compilar o programa e por o main a funcionar?
E a funcionar de modo a que a main imprime os resultados que o utilizador vai mundano!
publicclassNumero{privateintnum;publicNumero(intnum){this.num=num;}publicvoidsetNum(intnum){this.num=num;}publicintgetNum(){returnnum;// não é necessário o this}publicvoidmain(String[]args)//sai o static{//int a=getNum();//a=(this.num);inta=this.num;//ver!!Numeron=newNumero(num);// System.out.println(n.getNum());// n.setNum(num);// System.out.println(n.getNum());// }}
Se fizer setNum e meter 10, a main há mostrar 10, se de seguida mudar pra 14 a main ha-de mostrar 14, certo? Mas como? Não tou vendo visto q pra compilar tive de tirar o static.
Eu pus int a=this.num; pra querer dizer q a guardara o valor da variavel de instancia que é a variavel usada pelos metodos setNum e getNum.
Que acham?
peczenyj
chame esse seu metodo main de outra coisa. Principal por exemplo.
no metodo publico (public), estático (static), que não retorna nada (void) chamado main que tem como argumento um array de Strings vc faça:
Numero n = new Numero(); n.Principal();
ou
new Numero().Principal();
pronto, vc fez o teste que vc quer
P
paulovr
public static void Principal(String[] args)
{
new Numero().Principal();
//int a=getNum();
//a=(this.num);
int a=this.num; //ver!!
Numero n = new Numero(num); // cria um nome Numero com valor 10
System.out.println(n.getNum()); // imprime o valor de n (10)
n.setNum(num); // seta o valor de num para 20
System.out.println(n.getNum()); // imprime o valor de n (20)
}
Dá erro! Cannot find symbol, constructor Numero.
Que será?
peczenyj
Ah
Falta declarar um construtor sem argumentos para fazer dessa forma.
Ah o velho construtor default que desaparece se vc declarar algum construtor…