Metodos statics

cara… tenho algumas perguntas…
um atributo estatico é akela variavel na classe que mantem um msm valor para todos os objetos pois eh armazanado soh uma vez…

mas como funciona um metodo static ??

pq o main(String args[]) tem q ser static ??

e pq todos os metodos usados dentro de um metodo static devem ser tb statics ???

por exemplo

public class prog1{

public static void main(String args[]){
   escreve("hello");

}
public static void escreve(String s){
   System.out.println(s);
}

}

se o metodo escreve naum fosse static… naum compilaria

Olá,
eu acho que você está confundindo um pouco as coisas…

atributos ou variávels que nao podem ser alterados depois de sua primeira atribuição sao do tipo FINAL, tipo:

private final int FIVE = 5;

quer dizer que esta variável será sempre igual a 5, e nunca será alterada;

já a palavra chave STATIC significa que você pode chamar aquele método ou atributo de ma classe sem precisar criar um objeto do tipo da classe, ex.:

int = Integer.parseInt(“5”);

parseInt é um método estático, pois você não precisa criar um new Integer para chamar este método, basta apenas indicar qual a classe que ele pertence, seguido de um ponto (no caso Integer.).

Pode ocorrer de uma variável ser FINAL e STATIC ao mesmo tempo, tipo

public static final int FIVE = 5;

onde voce pode atribuir esta variavel em qulque codigo, tipo:

if(esteNumero = UmaClasse.FIVE) {
System.out.println(“este numero eh cinco”);
}

esperoTerAjudado()

[quote=“vammpiro”]
pq o main(String args[]) tem q ser static ??[/quote]

O main tem que ser static pra JVM poder chamá-lo na hora de executar.

[quote=“vammpiro”]
e pq todos os metodos usados dentro de um metodo static devem ser tb statics ???

por exemplo

public class prog1{

public static void main(String args[]){
   escreve("hello");

}
public static void escreve(String s){
   System.out.println(s);
}

} [/quote]
Neste caso não pq vc está chamando ele de dentro de um método static que ele tem que ser static. Acontece que pra você chamar um método não static (de qualquer lugar), antes você precisa criar um objeto da classe, e depois chamar o método. Por exemplo:

[code]
public class Prog1{

public static void main(String args[]){
  //Aqui vc precisa criar uma instância da classe prog1...

   Prog1 objeto_prog1 = new Prog1();

  //Aqui faço uma referência ao método que pertence ao objeto_prog1...
   objeto_prog1.escreve("hello");

}
//Repare que retirei o static do métod abaixo.
public void escreve(String s){
   System.out.println(s);
}

}[/code]

Enfim, a palavra reservada “static” faz com que o método ou atributo, fique disponível na memória, para poder ser acessado de qualquer parte do programa sem a necessidade de se criar um instância da classe à qula ele pertence.

public static void esperoterajudado(){
}

[quote=“feliperod”][quote=“vammpiro”]
pq o main(String args[]) tem q ser static ??[/quote]

O main tem que ser static pra JVM poder chamá-lo na hora de executar.

[quote=“vammpiro”]
e pq todos os metodos usados dentro de um metodo static devem ser tb statics ???

por exemplo

public class prog1{

public static void main(String args[]){
   escreve("hello");

}
public static void escreve(String s){
   System.out.println(s);
}

} [/quote]
Neste caso não pq vc está chamando ele de dentro de um método static que ele tem que ser static. Acontece que pra você chamar um método não static (de qualquer lugar), antes você precisa criar um objeto da classe, e depois chamar o método. Por exemplo:

[code]
public class Prog1{

public static void main(String args[]){
  //Aqui vc precisa criar uma instância da classe prog1...

   Prog1 objeto_prog1 = new Prog1();

  //Aqui faço uma referência ao método que pertence ao objeto_prog1...
   objeto_prog1.escreve("hello");

}
//Repare que retirei o static do métod abaixo.
public void escreve(String s){
   System.out.println(s);
}

}[/code]

Enfim, a palavra reservada “static” faz com que o método ou atributo, fique disponível na memória, para poder ser acessado de qualquer parte do programa sem a necessidade de se criar um instância da classe à qula ele pertence.

public static void esperoterajudado(){
}[/quote]

completando a sua resposta
o main tem que ser static pq a JVM procura por um metodo statico chamado main que recebe uma array de strings e executa akele metodo
isso para a JVM não ter q criar uma instância da classe para executar o programa… imaginou a confusão que ia dar?

agora qnto a se vc estiver usando um metodo statico, todos os outros terem que ser estatico:

qndo vc usa uma metodo estatico vc não tem uma instancia de classe. vc só pode usar metodos não estaticos se vc estiver trabalhando com uma instancia dekela classe

certo? :wink:

no GUJ tem um material muito bom sobre static … www.guj.com.br

Concordo com vcs…
Resumindo o que ja foi dito…

Método static pode ser chamado a qualquer momento sem precisar criar o objeto a qual ele pertence…

O main precisa ser static porque a JVM procura por um método desse tipo para excutar o programa sem que seja necessário estanciar um objeto para isso.

Fui!

[quote=“acosta”]Concordo com vcs…
Resumindo o que ja foi dito…

Método static pode ser chamado a qualquer momento sem precisar criar o objeto a qual ele pertence…

O main precisa ser static porque a JVM procura por um método desse tipo para excutar o programa sem que seja necessário estanciar um objeto para isso.

Fui![/quote]

básicamente é isso

em orientação a objetos, u metodo pode ser chamado de “serviço”
para saber se o metodo deve ser estatico ou não, pode-se pensar se o “serviço” deve ser realizado pela instância ou o “serviço” deve ser realizado pela classe

Valeu Galera…

Agora tá bem explicadinho…

Agora tem uma outra questão mais aprofundada sobre static que são os blocos estaticos.

No Java existem 3 coisas que se pode colocar em uma classe que não precisar estar dentro de métodos. São elas:

variáveis de instância, calsses internas e blocos estaticos.

Galera, eu postei em forma de citação pq não me lembro onde peguei este tutorial. Só sei que foi em um dos portais JUG’S…
Vale a pena dar uma olhada nisso.

té +

galera valeu d+++