.class
在Java 中是什么意思?例如,如果我创建了一个名为的类Print
。什么Print.class
回报?
.class
语法仅与.class
文件扩展名有关。
.class
在Java 中是什么意思?例如,如果我创建了一个名为的类Print
。什么Print.class
回报?
.class
语法仅与.class
文件扩展名有关。
Answers:
当您.class
在类名称之后编写时,它引用了类文字-
java.lang.Class
表示有关给定类信息的对象。
例如,如果您的类是Print
,则Print.class
是一个表示Print
运行时类的对象。它是的getClass()
任何(直接)实例的方法返回的同一对象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
?是否会尝试class Activity
通过比较每个班级找出答案?
.class
在没有可用的类实例时使用。
.getClass()
当有可用的类实例时使用。
object.getClass()
返回给定对象的类。
例如:
String string = "hello";
System.out.println(string.getClass().toString());
这将输出:
class java.lang.String
这是字符串对象的类:)
getClass()
仅当您具有指向该类对象的引用时才有用。ClassName.class
即使该类没有实例也可以使用。例如,考虑Math.class
。每种情况在某些情况下都是正确的。
.class
和.getClass().
如果对象的实例可用,则获取其类的最简单方法是调用 Object.getClass()
该.class
语法
如果类型可用,但是没有实例,则可以通过.class
在类型名称后附加一个Class来获得。这也是获取原始类型的Class的最简单方法。
boolean b;
Class c = b.getClass(); // compile-time error
Class c = boolean.class; // correct
只是为了澄清,此“ .class”方法不是引用编译Java代码后看到的字节码文件,也不是OOP理论中类与对象的概念之间的混淆。
在Java中,此“ .class”方法用于代码反射。通常,您可以为类收集元数据,例如完整合格的类名称,常量列表,公共字段列表等。
检查这些链接(上面已经提到)以获取所有详细信息:
https : //docs.oracle.com/javase/tutorial/reflect/class/classNew.html
https://docs.oracle.com/javase/8/docs /api/java/lang/Class.html
通常,当您开始构建项目时,您不打算立即使用Reflection。在尝试管理已经工作的代码之后,您就知道需要它。很多时候,您需要它来管理程序的多个实例。也许您想标识每个特定的“克隆”以确定是否已定义某些内容,或者计算函数的数量,或者只是简单地记录类的特定实例的详细信息。
如果没有可用的实例,则使用.class
语法获取类的相应Class对象,否则可以使用getClass()方法获取Class对象。由于没有原始数据类型的实例,因此我们必须.class
对原始数据类型使用语法。
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());
}
}
我认为这里的关键是理解类和对象之间的区别。对象是类的实例。但是在完全面向对象的语言中,Class也是Object。因此,调用.class
获取对该类的Class对象的引用,然后可以对其进行操作。
in a fully object-oriented language, a Class is also an Object
?<需要引用>
类文字是由类,接口,数组或原始类型的名称或伪类型void组成的表达式,后跟“。”。和令牌类。JDK 5.0中的更改之一是类java.lang.Class是通用的java.lang.Class Class<T>
,因此:
Class<Print> p = Print.class;
这里参考:
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