O que .classsignifica em Java? Por exemplo, se eu criei uma classe chamada Print. O que Print.classretorna?
.classsintaxe que está relacionada, incidentalmente, à .classextensão do nome do arquivo.
O que .classsignifica em Java? Por exemplo, se eu criei uma classe chamada Print. O que Print.classretorna?
.classsintaxe que está relacionada, incidentalmente, à .classextensão do nome do arquivo.
Respostas:
Quando você escreve .classapós um nome de classe, ele faz referência à classe literal -
java.lang.Classobjeto que representa informações sobre determinada classe.
Por exemplo, se sua classe é Print, então Print.classé um objeto que representa a classe Printem tempo de execução. É o mesmo objeto retornado pelo getClass()método de qualquer instância (direta) de Print.
Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
Writer.class.getDeclaredField("writeBuffer").
Print.class?
new Intent(this, Activity.class? Ele tentará descobrir class Activitycomparando cada classe?
.class é usado quando não há uma instância da classe disponível.
.getClass() é usado quando há uma instância da classe disponível.
object.getClass() retorna a classe do objeto especificado.
Por exemplo:
String string = "hello";
System.out.println(string.getClass().toString());
Isso produzirá:
class java.lang.String
Esta é a classe do objeto string :)
getClass()só é útil se você tiver uma referência apontando para um objeto da classe. ClassName.classpode ser usado mesmo que a classe não tenha instâncias. Por exemplo, considere Math.class. Cada um está correto para determinadas situações.
.classe.getClass().
Se uma instância de um objeto estiver disponível, a maneira mais simples de obter sua Classe é chamar Object.getClass()
A .classsintaxe
Se o tipo estiver disponível, mas não houver instância, é possível obter uma Classe anexando .classao nome do tipo. Essa também é a maneira mais fácil de obter a classe para um tipo primitivo.
boolean b;
Class c = b.getClass(); // compile-time error
Class c = boolean.class; // correct
Consulte: docs.oracle.com sobre classe
Apenas para esclarecer, esse método '.class' não se refere ao arquivo de bytecode que você vê após compilar o código java, nem uma confusão entre os conceitos de Class vs. Object na teoria de OOP.
Este método '.class' é usado em Java para o código Reflection. Geralmente, você pode coletar metadados para sua classe, como o nome completo da classe, lista de constantes, lista de campos públicos, etc.
Verifique estes links (já mencionados acima) para obter todos os detalhes:
https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
https://docs.oracle.com/javase/8/docs /api/java/lang/Class.html
Normalmente você não planeja usar o Reflection imediatamente quando começar a construir seu projeto. É algo que você sabe que precisa depois de tentar gerenciar o código que já está funcionando. Muitas vezes você precisa gerenciar várias instâncias do seu programa. Talvez você queira identificar cada 'clone' específico para determinar se algo já está definido, ou contar o número de funções, ou simplesmente registrar os detalhes de uma instância específica da sua classe.
Se não houver uma instância disponível, a .classsintaxe será usada para obter o objeto Class correspondente para uma classe; caso contrário, você poderá usar o método getClass () para obter o objeto Class. Como não há instância de tipo de dados primitivo, precisamos usar a .classsintaxe para tipos de dados primitivos.
package test;
public class Test {
public static void main(String[] args)
{
//there is no instance available for class Test, so use Test.class
System.out.println("Test.class.getName() ::: " + Test.class.getName());
// Now create an instance of class Test use getClass()
Test testObj = new Test();
System.out.println("testObj.getClass().getName() ::: " + testObj.getClass().getName());
//For primitive type
System.out.println("boolean.class.getName() ::: " + boolean.class.getName());
System.out.println("int.class.getName() ::: " + int.class.getName());
System.out.println("char.class.getName() ::: " + char.class.getName());
System.out.println("long.class.getName() ::: " + long.class.getName());
}
}
Eu acho que a chave aqui é entender a diferença entre uma classe e um objeto. Um objeto é uma instância de uma classe. Mas em uma linguagem totalmente orientada a objetos, uma classe também é um objeto . Portanto, chamar .classobtém a referência ao objeto Class dessa classe, que pode ser manipulado.
in a fully object-oriented language, a Class is also an Object? <citation needed>
Um literal de classe é uma expressão que consiste no nome de uma classe, interface, matriz ou tipo primitivo ou no vazio do pseudo-tipo, seguido por um '.' e a classe de token. Uma das mudanças no JDK 5.0 é que a classe java.lang.Class é genérica java.lang.Class Class<T>, portanto:
Class<Print> p = Print.class;
Referências aqui:
https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
http://docs.oracle.com/javase/tutorial/extra/generics/literals.html
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.2