在Java中,对Class.class的引用是做什么的?

时间:2010-07-20 23:20:51

标签: java android

我正在构建一个小型的Android应用程序,但这更像是一个Java问题,而不是一个Android问题。查看教程中的行看起来像:

startService(new Intent(this, MyService.class));

“MyService.class”字段到底代表什么?这仅仅是对模板类的引用吗?

感谢。

4 个答案:

答案 0 :(得分:5)

安迪的答案肯定是正确的,但我想稍微扩展一点。

.class是获取Class对象实例的特殊语法。当只有类型可用且没有相关对象的实例时,可以使用它。它可以与任何具体类型名称一起使用,包括数组和基元。例如,int.class有效。

获取Class对象的这种方式(以及其他方式)记录在旧的Sun reflection API docs中。

特殊.class语法经常出现在惯用语中,作为通用代码中的“类型标记”。使用.class获得的类文字在“在传递编译时和运行时类型信息的方法之间传递”时称为类型标记(Joshua Bloch's Effective Java 2e,第142页)。

答案 1 :(得分:3)

是的,MyService.class返回一个表示MyService类的Class对象。 Intent使用它来识别您打算启动的服务或活动。

答案 2 :(得分:1)

MyService.class允许您单独从类名中获取描述MyClass类的Class对象(而不是让类的实例请求object.getClass())。

答案 3 :(得分:1)

在JVM中,当加载类时,类型为Class的对象表示内存中已加载的类。 com.abc.MyClass.class是一个文字表达式,表示类Class的{​​{1}}对象。

如果您有对类的对象的引用,也可以通过调用com.abc.MyClass方法获得相同的Class对象。

myClassReference.getClass()对象可用于查找有关类结构的信息,访问字段,调用方法以及使用Java Reflection API实例化类的对象。