Dúvida sobre a classe Class[RESOLVIDO]

9 respostas
danielbussade

Olá a todos, tava programando uma interface e me surgiu uma dúvida, de onde vem o atributo .class, de uma interface, sendo que uma interface não herda de ninguém??

Se alguém pudesse me explicar melhor o atributo .class, que tem em toda classe e interface, ou melhor se pudesse me indicar algum artigo sobre a classe Class, eu agradeceria, pois tenho muitas dúvidas em relação a esta classe!

Att

9 Respostas

Rafael_Nunes

Toda classe/interface tem uma referência .class que se referencia a própria classe carregada pelo classloader.

Dá uma pesquisada por Reflection.

francislon

Não sei se entendi sua pergunta, mas .class são os arquivos intermediarios(que contém bytecodes) interpretados pela JVM.
Quando vc compila um arquivo .java, o compilador gera um codigo intermediario que a JVM interpreta, este código está no .class da sua classe.
Era isso mesmo?

danielbussade

francislon:
Não sei se entendi sua pergunta, mas .class são os arquivos intermediarios(que contém bytecodes) interpretados pela JVM.
Quando vc compila um arquivo .java, o compilador gera um codigo intermediario que a JVM interpreta, este código está no .class da sua classe.
Era isso mesmo?

Olá, não era isso não . class eh o código gerado isso eu sei, eu to precisando entender melhor a classe Class do java, é uma classe que retorna informações sobre qualquer classe, com ela você pode ver se a classe está anotada com alguma annotation, além de recuperar todos seus métodos e campos, e modifcadores.
Mas de qualquer forma, valeu!

danielbussade

Rafael Nunes:
Toda classe/interface tem uma referência .class que se referencia a própria classe carregada pelo classloader.

Dá uma pesquisada por Reflection.

Obrigado pelo resposta, rafael, agora olha:

Class extends Object

certo?

E object tem o método final:

public final Class<?> getClass()

O que este método faz,?Pelo que entendi, quando uma classe herdar de Object, vai herdar este método mas nao vai poder subscrever , então na verdade este caractere curinga(?), faz com que este método herdado, em outra classe retorne o tipo da própria da classe herdada?
É isso??

É só mais uma coisa, o que faz o método getClass da classe Class, já li o javadoc, mas não entendi!!

Valeu

Att

davidbuzatto

Lembrando que .class é um atalho para o método .getClass() (herdado de Object).

Uma coisa interessante é que você pode fazer int.class ou double.class caso você precise verificar se algo é de um tipo primitivo em particular.

Como já foi dito pelo Rafael, a referência a Class serve para que você e a máquina virtual (presumo) consiga verificar o funcionamento de uma classe em particular.

davidbuzatto

Como Class é uma classe, e ela herda de Object, getClass de Class retorna a Class que representa a Class para o classloader!
Nossa! Entendeu?

Toda essa parafernalha é usada principalmente quando vc precisa usar reflexão…

davidbuzatto

Dá uma olhada aqui p/ um exemplo de como usar int.class e o propósito disso.

danielbussade

Acho que agora entendi kra, por isso o construtor de Class é private, pois somente a JVM, é que cria a classe Class.
Assim quando eu criar qualquer classe ou interface eu posso usar o .class, ex:

Class class= Usuario.class;

Esse codigo me retornaria toda a estrutura da classe, Usuario, do qual com a referencia class, eu poderia recuperar todos seus metodos, e seus atributos com os metodos implementados da interface Reflection, certo?

Agora, a ultima duvida porque o metodo:

public final Class<?> getClass();

Tem um caracter curinga, se sempre o getClass vai retornar um objeto do tipo Class, porque ele nao foi definido assim:

public final Class getClass();

Valeu!!

davidbuzatto

Vc conhece genéricos? Dê uma estudada, é algo bem poderoso. Funciona de forma parecida com o mecanismo de templates do C++. Pelo pouco que estou vendo de C++, achei que o templates são mais charmosos que os genéricos hehehe. O C++ é mais charmoso que o Java hehehe.

O ? ali vai indicar que a Class retornada é a Class que representa uma classe arbitrária, que vai ser a classe que representa a classe do objeto ou primitivo que está invocando o método.

Para esclarecer ainda mais, dá uma olhada no código fonte da classe Object e de alguma outra classe.

Até mais!

Criado 13 de fevereiro de 2008
Ultima resposta 13 de fev. de 2008
Respostas 9
Participantes 4