Constantes em memória [era Pergunta muito avançada..]

Bom dia caros colegas de linguagem …

Meu nomé é Marcelo, programo em java e recentemente estou trabalhando com J2ME…
Vamos a situação, digamos que temos uma classe que contenha apenas constantes, marcadas como public static final, e muitas outras classes implementam ela, e muitas classes são instanciadas ao mesmo tempo.
bom minha duvida é a seguinte:
essa classe de constantes será carregada na memória apenas 1 vez ou toda vez que uma classe que implementa ela for instanciada ela sera carregada ?

outra duvida aproveitando a brecha, alguem conhece um tutorial, livro, receita, manuscrito sei lá, de padrões, dicas, etc de desenvolvimento para Mobile Devices ?

muito obrigado pela atenção =)

Cada classe é carregada apenas uma vez, podem existir várias instâncias desta classe.
Suas constantes serão carregadas apenas uma vez.
Não conheço nenhum livro sobre j2me, talvez por que nunca trabalhei
com isto.

“Core J2ME”

Acho que o título do seu tópico espantou o pessoal. A pergunta nem é tão avançada assim.
Ela é carregada apenas uma vez, em cada classloader que você estiver usando. Então, muito provavelmente, uma vez só no programa inteiro.

Agora, não entendo o porque da existência de tal classe, nem mesmo o porque que outras ainda precisam implementa-la. Isso está me cheirando a um gravíssimo anti-pattern, o “Constant Interface Anti-Pattern”.

Muito obrigado pela rapida resposta,
esclarecendo a utilização das constantes foi adotada para facilitar o porting dos aplicativos…

Valeu…

E porque a classe precisa herdar/implementar outra para usar as constantes? Que tal se ela apenas chamar a cosntante em outra classe como:

class FazAlgo{

int coisaQualquer = ConstantesQuePreciso.MINHA_CONSTANTE;
}

Ao invés de:

class FazAlgo extends ConstantesQuePreciso{

int coisaQualquer = MINHA_CONSTANTE;
}

Herança em Java é para reutilizar tipos polimórficos e estabelecer contratos não para reaproveitar constantes.

1- opa, ele não herda, ele implementa…
2- este padrão nao foi adotado pela minha pessoa…

valeu =)

[quote=pcalcado]E porque a classe precisa herdar/implementar outra para usar as constantes? Que tal se ela apenas chamar a cosntante em outra classe como:

class FazAlgo{

int coisaQualquer = ConstantesQuePreciso.MINHA_CONSTANTE;
}

Ao invés de:

class FazAlgo extends ConstantesQuePreciso{

int coisaQualquer = MINHA_CONSTANTE;
}

Herança em Java é para reutilizar tipos polimórficos e estabelecer contratos não para reaproveitar constantes.

[/quote]

Só para complementar o que o Philip, corretamente, disse:

A relação É-UM é estabelecida entre a classe de constantes e as outras classes que herdam dela?
Se não (que é o mais provável), não faz sentido utilizar herança. Como disse o ViniGodoy, isso é um anti-pattern.

Não importa. Ao implementar uma interface, como disse acima, você está estabelecendo um contrato. Não há contrato quando se herdam constantes, apenas uma gambiarra -apesar de ser bem comum e difundida. Outra solução, dependendo do caso, é usar static imports.

Refactoring nele!

hummm…
Muito interessante a ideia do import… não tinha me vindo a cabeça…
valeu pela força galera…

quanto ao livro, o core J2ME explica o basicão das APIs e do ambiente JME. Interessante mesmo é verificar as otimizações possíveis nesses ambientes restritos em termos de hardware. alguns conceitos básicos ( e estranhos à primeira vista) são, por exemplo, diminuir o número das classes do projeto, tomar cuidado com loops com iterações desnecessárias, etc, etc… Mas eu não conheço nenhuma bibliografia sobre esse assunto ainda… E por favor se alguém souber uma boa referência, postem rs