Facilidade para static e por que o main existe  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

Eu queria saber por que não posso fazer isso em Java:



Não seria bastante útil?

Outra dúvida, por que o main existe? Isto é, ouvi dizer que o static main não é muito OO, então por que em vez disso não foi definido o construtor da classe:



PS: eu prefiro o main, mas fico me perguntando...

caiofilipini
GUJ Master
[Avatar]

Membro desde: 26/06/2003 15:17:59
Mensagens: 1255
Localização: São Paulo
Offline

renato3110 wrote:Outra dúvida, por que o main existe? Isto é, ouvi dizer que o static main não é muito OO, então por que em vez disso não foi definido o construtor da classe:


Porque o construtor da classe não foi feito para inicializar uma aplicação.

[]'s

Caio N. Filipini
"There is no spoon."
[Email] [WWW]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

renato3110 wrote:Eu queria saber por que não posso fazer isso em Java:
. . . . . . . .
Não seria bastante útil?


Não entendi qual seria a vantagem além de um puta incentivo a programação estruturada.

renato3110 wrote:Outra dúvida, por que o main existe?


Foi a maneira encontrada para localizar a classe que inicia o sistema. Nela são colocados alguns bytecodes a mais. Faça um pequeno teste usando javap. Será que você preferiria um arquivo em xml que ainda não existia qdo o Java foi criado, com a informação por onde iniciar?

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Java tem o public static void main(String[]) pq as aplicacoes precisavam comecar de algum lugar, e construtores nao sao uma boa ideia pra isso - ou qualquer classe que tivesse construtor vazio (sem parametros) poderia ser "rodada", o que nao eh exatamente uma boa ideia.

Concordo, nao eh muito OO. Java nao eh "muito OO", pq ela foi bolada pra ser palatavel tanto pros malas que vieram do Smalltalk quanto compreensivel pros perdidos que estavam programando em C, e pros coitados programando em C++. Entao, voce vai encontrar muitas coisas assim, pra todo lado, na sintaxe.
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

caiofilipini wrote:Porque o construtor da classe não foi feito para inicializar uma aplicação.


Putz mas é isso que eu quero saber: por que não?

Luca wrote:Olá

Não entendi qual seria a vantagem além de um puta incentivo a programação estruturada.


Mas eu eu tiver uma classe que não tem sentido instanciar, vou digitar static nos membros de qualquer forma, então isso podia ser facilitado.
Na minha opinião os caras não fizeram isso simplesmente por não fazer.

Luca wrote:Foi a maneira encontrada para localizar a classe que inicia o sistema. Nela são colocados alguns bytecodes a mais. Faça um pequeno teste usando javap. Será que você preferiria um arquivo em xml que ainda não existia qdo o Java foi criado, com a informação por onde iniciar?


Quando eu rodo um jar, que tal o main-class? O que é javap?

Lembrando que eu prefiro o main, mas tenho essas dúvidas.
caiofilipini
GUJ Master
[Avatar]

Membro desde: 26/06/2003 15:17:59
Mensagens: 1255
Localização: São Paulo
Offline

renato3110 wrote:
caiofilipini wrote:Porque o construtor da classe não foi feito para inicializar uma aplicação.


Putz mas é isso que eu quero saber: por que não?


Construtores foram feitos para inicializar objetos. Como nem todos os objetos representam o "startup" de uma aplicação, *na minha opinião*, o construtor não é um bom lugar para se fazer isso.

[]'s

Caio N. Filipini
"There is no spoon."
[Email] [WWW]
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

Quanto ao main, gostei da observação do Carlos, o main é uma forma de marcar uma classe como "rodável".

Mas a primeira parada bem que os caras lá podiam facilitar as coisas. O criador do MONO disse uma vez que abandonou java por que os usuários não eram ouvidos. Por isso falo que às vezes Java parece um T-Rex com artrose. Vamo enviar uma sugestão de JSR para colocar o static direto na classe
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

caiofilipini wrote:Construtores foram feitos para inicializar objetos. Como nem todos os objetos representam o "startup" de uma aplicação, *na minha opinião*, o construtor não é um bom lugar para se fazer isso.

[]'s


Concordo
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

Só para lembrar: member classes podem e sempre que possível devem ser declaradas como estáticas.

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
Thiago Senna
GUJ Master
[Avatar]

Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline

alguém wrote:Porque o construtor da classe não foi feito para inicializar uma aplicação.


Além do que o caio disse, tem outro problema!
Você não conseguirá usar nenhum método deste objeto antes o contrutor termine de ser executado! Mais um motivo para não iniciar a aplicação no construtor!
[Email]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Thiago Senna wrote:Além do que o caio disse, tem outro problema!
Você não conseguirá usar nenhum método deste objeto antes o contrutor termine de ser executado! Mais um motivo para não iniciar a aplicação no construtor!


Como não?


gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Thiago Senna
GUJ Master
[Avatar]

Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline

Oloco!!!

Bom.. vamos ao esclarecimentos!!!

"Os métodos e variáveis de instância só podem ser acessados depois de o contrutor da super classe ser executado."

Livro da Kath Sierra!, página 214.

Bom, pelo que vi, acho que eu pisei na bola..... não se trata do próprio contrutor do objeto, e sim do contrutor de sua classe pai!

Foi Mau!!

Abraços!
[Email]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Luca wrote:Olá

Só para lembrar: member classes podem e sempre que possível devem ser declaradas como estáticas.

[]s
Luca


E depois quando precisarem voltar a ser instance methods você vai se perguntar porque o tiro no pé doi.

Uma opção razoavel que é permitir que classes implementando Runnable sejam executadas

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Thiago Senna wrote: "Os métodos e variáveis de instância só podem ser acessados depois de o contrutor da super classe ser executado."
Livro da Kath Sierra!, página 214.

Bom, pelo que vi, acho que eu pisei na bola..... não se trata do próprio contrutor do objeto, e sim do contrutor de sua classe pai!


Nesse caso você está se referindo a classes que são usadas externamente. Ex:

X.java

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

Do que o louds e o Luca estão falando? O que são member classes?
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team