Static

Estou com uma dúvida q
não estou conseguindo entender

class Teste { int x = 37; public static void main(String [] args) { System.out.println(x); } }
Porque esse código não compila?
Será que alguém poderia me ajudar? :smiley:

Tente

class Teste { static int x = 37; public static void main(String [] args) { System.out.println(x); } }

Como o método main é estático, vc deve criar o int como variabel dentro da main ou colocar o inteiro como estático, como fiz no exemplo.

class Teste { static int x = 37; public static void main(String [] args) { System.out.println(x); } }

Pq a variável que vc está se referindo (x) não é estática…enquanto o método é…

Olá Claudineto,
obrigado pelo ajuda mas eu estou querendo entender
o porque não compila?
Eu sei que quando declaramos um atributo como static,
ele passa a não ser mais um atributo de cada objeto, e sim
um atributo da classe, a informação fica guardada pela classe,
não é mais individual para cada objeto.
eu sei q esse código compila:

public class Teste{ static int x = 37; public static void main(String[] args) { System.out.println(x); }
[]'s :smiley:

opa renzonuccitelli, blz?
obrigado pela ajuda,
mas vc sabe o porque?
porque um metodo main só imprimi a variável x
qdo ela é estática?
qdo ela é uma variável comum o método principal main ñ aceita?

[]'s :smiley:

Ricardo, como vc mesmo disse, quando a varíavel é estática, ela pertence a classe. Assim vc não precisa nem usar uma instancia da mesma para usar o método, como vc pode ver em algumas classes já conhecidas, como Math.
Já um atributo não estático há necessidade de se intanciar um objeto, pois cada instancia da classe terá seu próprio atributo, Que define seu estado. Assim, o atributo não estático pode ser diferente para diferentes instâncias, já o estático não.
O mesmo vale para os método estáticos e não estáticos.
Então quando vc tem um método estático, que pertence à classe, não faz sentido ter um método ou atributo não estático, sem passar a uma instância do objeto a esse método, que é justamente o que vc estava tentando fazer. Pela mesma razão, não faz sentido passar um usar o this dentro de um método estático.
Não sei se consegui ser muito claro, mas tentei responder…

Poderia explicar tb com relação à compilação.
Quando vc o static, vc inicializa o método ou atributo na hora da compilação. Quando não usa esse modificador, o método ou atributo é criado em tempo de execução (na hora que vc constrói os objetos). Então seria estranho em um método que será construido em tempo compilação usar um método ou atributo que só será construido em tempo de execução.
Não sei se ficou mais claro, vamos ver se alguma pessoa mais didática coloca uma explicação melhor aqui.