Grande dÚvida..!

No livro a qual estou estudando java vi a seguinte declaração de variavel…!

não entendi nada…
o que eu sei sobre e o seguinte

private e modificador de acesso no caso essa variavel só
pode ser usada na classe a qual foi declara certo…??
se for public pode ser usada em qualquer outra classe
se eu estiver errado por favor me expliquem de uma maneira objetiva…

Nem tenho idéia sobre esse comando em java essa é minha principal
dúvida pra que isso funciona…???
é a primeira vez que eu me deparo com esse comando por favor
se alguém souber sua função me explique…!

Static e quando vc naum prescisa instanciar objeto de uma classe para usar seus métodos certo…?? mais variavel static isso que eu naum entendi…! por favor quem souber melhor sobre esses comandos por favor me ajude…!

Ola,

STATIC - define que um atributo ou metodo sera de escopo de Classe, não da inatnacia, então se os modiifcadores permitires vc pode usa-los sem necessitar instanciar um objeto da classe.

FINAL - define, em caso de atributo, que não será permitido modificar o valor que este referencia, em caso de metodo, defini que este não poderá ser sobrescrito, e em caso de classe defini que a classe não pode ser estendida, como é o caso da java.lang.Math…

Ola,

Como dica de atributos estaticos vão as constantes da javax.swing.SwingConstantes, ela é uma interface cheia de atributos estaticos…

Vou tentar ser objetivo

Final
Variaveis definidas como final não podem ter seu valor alterado apos sua atribuição.
A atribuição de um valor para uma variavel de instancia Final, deve ser executa em sua declaração ou dentro do construtor. Caso uma variavel Final não seja inicializada, um erro de compilação será exibido !

Variaveis globais e parametros tambem podem ser Final e não podem ter seus valores alterados apos de inicializadas.

Static
Uma variavel definida como static, pertence a classe não a instancia. Porem vc pode acessa-la apartir de uma classe ou de uma instancia.

o que o cara quis fazer com a linha abaixo?

private final static int aux; 

bom, vc faz isso qdo você quiser ter uma constante em Java !! :wink:

Sem falar que o código tá errado né… Se compilarmos uma classe com o atributo como está vai dar:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The blank final field aux may not have been initialized

Se o atributo é final precisa obrigatoriamente ser inicializado…

private final static int aux = 250; 

cara eu vi esse tipo de variavel em um jogo que eu estou fazendo soh pra treinar lógica realmente prescisa de uma variavel que não retorna valor…!
muito obrigado vc me ajudou muito…! foi bem objetivo…!
mais aqui cara esse tipo de variável

Pra tb é novidade… ouvir falar em enumeração… vc sabe como essa variavel funciona…??

Eh mesmo GPR, vai dar pau !!

Mas, so uma colocação !!

Se o atributo for apenas Final, ele não precisa ser inicializado na declarcação !!
Ele pode ser inicilizado no construtor !!

Porem se o mesmo for definido como Final e Static ele precisa ser inicilizado na declaração, pois o construtor não poderá inicializar o atributo, pois o mesmo pertence a classe não a instancia !!!

soh não estou entedendo muito bem sobre variavel static…!
não estou conseguindo pegar uma lógica pra saber como essa variavel realmente funciona…! falaram que quando eu não usar static não é necessario
iniciar a variavel com um valor exemplo:

não estou entedendu a lógica de variaveis static… alguém pode me explicar de um forma simples e objetiva…?

Precisa sim… só que sem static, o atributo faz parte da instância da classe… e você deve inicializar no construtor se não o fizer direto na criação do atributo:

public class Exemplo1 {
	private final int codigo;
	public Exemplo1() {
		//inicializou no construtor, pois sem static, o atributo agora faz parte da instância da classe. 
		this.codigo = 1;
	}
}

Não é a variavel que não precisar ser inicilizada, e sim, que não é necessário possui um instancia (objeto) para acessar uma variavel estatica.

por exemplo,

[code]
public class MainClass {

public final static int estatica = 10;

public final int  naoEstatica= 10;

/** Creates a new instance of MainClass */
public MainClass() {
   
}
  
/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    
    //Ate aqui não foi criado nenhuma instancia e foi possivel acessar 
    //o atributo "estatica"
    //Isso por que a variavel é estatica e pertence a classe
    //É utilizado o nome da classe pra acessar a variavel
    System.out.println("Variavel Estatica : " + MainClass.estatica);
    
    //É criado uma instancia da classe MainClass
    MainClass mainClass = new MainClass();
    
    // O acesso a uma variavel não estatica é restrita ao objeto,
    // pois sem o objeto, a variavel não existe
    System.out.println("Variavel Não Estatica : " + mainClass.naoEstatica);
    
    
    // So pra complicar um pouco mais
    // O objeto pode acessar uma variavel Estatica,
    System.out.println("Variavel Estatica : " + mainClass.naoEstatica);

    
    // Mas a classe não acessa um atributo da instancia
    // Aqui da erro de compilacao(System.out.println("Variavel Não Estatica : " + mainClass.naoEstatica);)
    //System.out.println("Variavel Não Estatica : " + MainClass.naoEstatica);        
    
}

}[/code]

Bom,

Se vc não quiser inicializar assim:

private final static int aux = 250; 

pode fazer criando um “bloco estático”… assim…

public class Exemplo2 {
	private static final int codigo;
	static {
		codigo = 10;
	}
}

funciona das duas formas…

Só pra ajudar na explicação

variaveis ou metodos static nao dependem de um objeto instanciado, ou seja, vc pode escrever um codigo do tipo:

class Saudacao{
       public static void oiStatic(){
                System.out.println("oi");
       }
       public void oiNaoStatic(){
                System.out.println("oi");    
       }
}

class TesteOi{
       public static void main(String args[]){
               Saudacao.oiStatic();       
               
               Saudacao s = new Saudacao();
               s.oiNaoStatic();
       }

}

no caso nao estatico eu preciso do objeto :wink: