Nem tudo vira objeto?

8 respostas
P

Ola a todos! Sou novato no mundo java (obvio ne) e espero estar fazendo uma pergunta nao muito idiota aqui…dei uma pesquisada por ai, mas nao encontrei nada especificadamente sobre isso (talvez pq eu tenha a reposta para essa duvida somente daqui a algum tempo, e eu sou um cara apressado…hehe)
Metodos static sao executados antes mesmo do construtor da classe, certo? Logo no famoso exemplo:

class Teste {

public static void main(String[] args){

System.out.println(Ola galaxia);//pq ola mundo ja ta desgastado…

}

}

Essa classe é instanciada? Ou a VM executa todas as instruçoes nela (caso hajam mais) sem nunca criar um objeto dessa classe? A unica hora em que um objeto é instanciado é no uso do operador new?
Essa duvida simplesmente me ocorreu pq achava que absolutamente TUDO em java era um objeto, num certo momento (de execução no caso), logo , quando ouvi uma historia de classes serem executadas sem serem instanciadas meu cerebro começou a dar varias exceptions…
Agradeço desde ja pela ajuda, e espero poder estar contribuindo com o forum de alguma forma!
Te +

8 Respostas

B

“Petrucci”:
Ola a todos! Sou novato no mundo java (obvio ne) e espero estar fazendo uma pergunta nao muito idiota aqui…dei uma pesquisada por ai, mas nao encontrei nada especificadamente sobre isso (talvez pq eu tenha a reposta para essa duvida somente daqui a algum tempo, e eu sou um cara apressado…hehe)
Metodos static sao executados antes mesmo do construtor da classe, certo? Logo no famoso exemplo:

class Teste {

public static void main(String[] args){

System.out.println(Ola galaxia);//pq ola mundo ja ta desgastado…

}

}

Essa classe é instanciada? Ou a VM executa todas as instruçoes nela (caso hajam mais) sem nunca criar um objeto dessa classe? A unica hora em que um objeto é instanciado é no uso do operador new?
Essa duvida simplesmente me ocorreu pq achava que absolutamente TUDO em java era um objeto, num certo momento (de execução no caso), logo , quando ouvi uma historia de classes serem executadas sem serem instanciadas meu cerebro começou a dar varias exceptions…
Agradeço desde ja pela ajuda, e espero poder estar contribuindo com o forum de alguma forma!
Te +

"Declarar algo como static TAMBÉM permite acessar as coisas diretamente, ou seja, sem precisar criar uma instância da classe. "

Quando algo é declarado static o que ocorre é que antes de" tudo " é alocado um espaço de memoria e esse objeto é guardado lá . Quando vc precisa utilizar um metodo static de uma classe, vc pode ou não instancia-la pq , de uma forma ou de outra o objeto ja estara na memoria !

Quanto a TUDO em java ser um objeto posso te assegurar uma coisa:
Java NÂO é 100% orientada a objetos .
Lembre-se que temos tipos primitivos !!!
Logo nem tudo em java é objeto, porém ,uma classe não deixa de ser um objeto pelo fato de vc acessar algo static nela sem instancia-la ! Lembre-se : Instancia-la é opcional!

Se não ficou claro posta de novo que o pessoal pode ajudar …

Dá uma olhada nesse link tem tudo o que vc precisa: http://www.guj.com.br/user.article.get.chain?page=1&article.id=121

Um abraço

M

Só pra complementar (acho que o Brossi ja falou tudo):

O método “public static void main(String args[]){}” é um método especial de java. A classe que tem esse método podem ser executadas, pois sua execução se inicia exatamente deste método.

att

P

Ola a todos!
Acho que entendi agora…consegui sanar boa parte das minhas duvidas com relação a isso. Realmente comi bola esquecendo dos tipos primitivos, o que ja faz com que java nao seja 100% OO(creio que SmallTalk seja totalmente OO nao?)
Mais uma perguntinha: Num caso de uma classe com metodos static e outros nao, é alocado na memoria o objeto inteiro (referente a classe) e vc só pode acessar o que é static (tendo que instancia-la para acessar o que nao é), ou apenas é alocado na memoria exatamente os metodos e atributos que sejam static? (sendo assim o objeto nao seria alocado “por inteiro”, por assim dizer)
Obrigado pelas respostas Morcegao e Brossi…o link com certeza foi muito util, ja me ajudou bastante!
Valeu e Te +

M

Pelo que sei, é alocado apenas os atributos static… O que acontece com eles é que todas as instâncias (objetos) daquela classe apontam para o mesmo lugar de memória para o atributo static. Dessa maneira, uma alteração num atributo static em um objeto, é refletido em todos os demais objetos.

Quanto aos métodos, se não me engano, eles não ficam carregados na memória até serem invocados… O que faz com que java acesse o class e execute os comandos. Em seguida ele é descarregado…

Resumindo o último parágrafo: Acredito que os métodos sejam acessados direto no class, sem serem carregados na memória…

Estou certo, Brossi???

B

“Petrucci”:
Ola a todos!
Acho que entendi agora…consegui sanar boa parte das minhas duvidas com relação a isso. Realmente comi bola esquecendo dos tipos primitivos, o que ja faz com que java nao seja 100% OO(creio que SmallTalk seja totalmente OO nao?)
Mais uma perguntinha: Num caso de uma classe com metodos static e outros nao, é alocado na memoria o objeto inteiro (referente a classe) e vc só pode acessar o que é static (tendo que instancia-la para acessar o que nao é), ou apenas é alocado na memoria exatamente os metodos e atributos que sejam static? (sendo assim o objeto nao seria alocado “por inteiro”, por assim dizer)
Obrigado pelas respostas Morcegao e Brossi…o link com certeza foi muito util, ja me ajudou bastante!
Valeu e Te +

Vou resumir suas duvidas no minimo de palavras possivel :

Objetos são CRIADOS utilizando a palavra chave new !
Porém, tudo o q é static ja esta alocado antes mesmo disso.
Quando instanciamos um objeto espaços na memoria são alocados para tal.
Ou seja , instanciar, por exemplo, uma classe, com a finalidade de acessar um metodo(exemplo) static é redundante, porém tb funciona!!!

Porque isso é redundante ? Pq o metodo ja existe antes mesmo do objeto!

Se continuar com duvida pode postar !

Um abraço !

P

E ai pessoal!
Obrigado pelas explicações…agora to entendendo bem melhor o static…Minha principal duvida era mesmo com relação ao fato de vc nao instanciar explicitamente uma classe static e ainda assim poder usa-la. Apesar de ate conseguir pensar em motivos para se usar atributos static, ainda nao tenho muita ideia em onde usar metodos, mas isso com certeza é pela minha falta de experiencia…
De qualquer forma, muito obrigado pela ajuda!!!
Te +

P

Otimo exemplo, ja entendi um uso pratico pra isso…rs. Valeu pela ajuda, vejo que vou aprender muito aqui.

te +

N

Hum…
Se eu tiver uma classe que não precise guardar atributos, que não precise guardar informação nenhuma. E sua função, seria processar os parametros vindos e depois dar uma resposta. Faz sentido nesse caso neh usar métodos staticos? Lembre-se da classe Math.

T+

Criado 24 de agosto de 2004
Ultima resposta 26 de ago. de 2004
Respostas 8
Participantes 4