Quais as diferenças e tipos de uso entre variaveis estaticas e não-estáticas

Oi gente, to estudando agora java pra aperfeiçoar meus conhecimentos na linguagem, no momento minha dúvida é em relação ao uso de variaves estaticas e não-estaticas

de uma olhada nos codigos abaixo

[code]public class estatico {

int x = 0;

public static void main(String args[])
{
    int c = x;
}

}[/code]

ela apresenta o seguinte erro:
non-static variable x cannot be referenced from a static context

agora simplesmente acrescentando o static, o codigo compila normalmente

[code]public class estatico {

static int x = 0;

public static void main(String args[])
{
    int c = x;
}

}[/code]

e ainda neste ultimo exemplo o codigo compila tbm, mesmo sem o uso de variavel estatica

[code]public class estatico {

int x = 0;

public static void main(String args[])
{
    estatico est = new estatico();
    int c = est.x;
}

}[/code]

agora, o que representa uma variavel estatica e não estatica, qual dos exemplos é melhor de ser usado, o 2º ou 3º?

Fala cara;

1 - Existem já Ns discursões aqui no GUJ sobre esse assunto, faça uma pesquisa no fórum antes de fazer novas perguntas;

2 - Dica: procure adequar seus códigos a convenção de nomenclaturas do Java; ou seja, sempre ‘Estatico’ no lugar de ‘estatico’;

3 - Sempre evite static, porque ??? Bom, aí acharás a resposta depois de entenderes o operador static e revisar as 214342443 mensagens acaloradas sobre o assunto aqui no fórum;

Abs [] e bons estudos;

[quote=fabiobh]Oi gente, to estudando agora java pra aperfeiçoar meus conhecimentos na linguagem, no momento minha dúvida é em relação ao uso de variaves estaticas e não-estaticas

de uma olhada nos codigos abaixo

[code]public class estatico {

int x = 0;

public static void main(String args[])
{
    int c = x;
}

}[/code]

ela apresenta o seguinte erro:
non-static variable x cannot be referenced from a static context

agora simplesmente acrescentando o static, o codigo compila normalmente

[code]public class estatico {

static int x = 0;

public static void main(String args[])
{
    int c = x;
}

}[/code]

e ainda neste ultimo exemplo o codigo compila tbm, mesmo sem o uso de variavel estatica

[code]public class estatico {

int x = 0;

public static void main(String args[])
{
    estatico est = new estatico();
    int c = est.x;
}

}[/code]

agora, o que representa uma variavel estatica e não estatica, qual dos exemplos é melhor de ser usado, o 2º ou 3º?[/quote]

Fala Fabio,

Bom cara, static basicamente é utilizado em uma variável para defini-la como uma variável de classe. Em seu primeiro exemplo, o erro ocorre porque “x” é uma variavél de estância. Logo para utiliza-la, você precisa estânciar um objeto da classe “estatico” (Como utilizado no exemplo 3).
no exemplo 2, como vc informou que x seria uma variavel da classe (static int x;), não é necessário instânciar um objet em Main para acessa-lo.

Obs: Tem um ótimo artigo aqui http://www.guj.com.br/articles/121 que vai te ajudar a compreender um pouco melhor o static :-o .

Vlw Fábio!