在Java中使用class关键字

时间:2012-10-19 21:29:50

标签: java class

我真的不明白class关键字在某些情况下是如何工作的。

例如,get(ClientResponse.class)方法采用ClientResponse.class。当它获得它时如何使用它,并且仅仅传递它的实例有什么优势?

8 个答案:

答案 0 :(得分:10)

SomeClass.class

返回Java Class对象。类是通用的,因此SomeClass.class的实际类型将是Class<SomeType>

此对象有很多用途,您可以在此处阅读Javadoc:http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html

答案 1 :(得分:6)

ClientResponse.class中,class不是关键字,也不是类ClientResponse中的静态字段。

关键字是我们用来在Java中定义类的关键字。 e.g。

public class MyClass { } /* class used here is one of the keywords in Java */

class中的ClientResponse.class是代表班级Class<T>的{​​{1}}实例的捷径。

还有另一种方法可以访问您需要ClientResponse实例的实例。 e.g

ClientResponse
  

仅仅传递它的实例有什么优势?

在上面的例子中,您可以看到ClientResponse obj = new ClientResponse(); Class clazz = obj.getClass(); 为空(NPE)时会发生什么。然后,该方法无法获取obj的{​​{1}}实例的引用。

答案 2 :(得分:2)

最重要的事实是 - 您不需要有实例来调用该方法。在由于某种原因无法实例化类的情况下,它非常有用,例如:它是抽象的,或者只有私有构造函数,或者只能通过某些框架(如Spring或JSF)正确实例化。

然后,您可以调用get来获取所请求类型的对象,而不知道它来自何处以及如何创建它。

答案 3 :(得分:1)

Class类与class关键字不同,是描述实例的元数据。它通过调用new告诉您有关您创建的实例的方法,数据成员,构造函数和其他功能。

  

例如get(ClientResponse.class)方法需要   ClientResponse.class在获取它时它是如何使用它的   只是传递一个实例的优势?

您无法将ClientResponse的实例传递给此方法;它期待关于 ClientResponse的所有实例的元数据。如果您传递了一个实例,那么您希望该方法可能会更改该实例的状态。但是传递关于所有实例的元数据可能允许该方法创建新类型的实例(例如动态代理)或执行依赖于关于ClientResponse的所有实例的元数据的其他内容。看到区别?

答案 4 :(得分:1)

一个类是对象的“蓝图”。该实例是一个对象。

如果我们有

public class SomeClass {
   int a;
   SomeClass(int a) {
      this.a = a
   }
}

我们可以有一个这个类的实例

SomeClass c = new SomeClass(10);

c是该类的一个实例。它的整数a的值为10

对象SomeClass.class代表Class

此处SomeClass.classobject类型的Class,其中包含SomeClass

的信息
  1. 具体课程 with
  2. 一个构造函数
  3. 带有整数成员变量

    以及关于班级metadata的更多其他SomeClass。请注意,它没有a的值。

  4. 您应该使用get(c),因为您打算使用instance c类似的调用c.a或其他有用的函数来执行操作来获取/获取实例的数据

    当get返回某些东西时,你应该使用get(SomeClass.class),因为参数是某种类型的类。例如,如果这是Registry类上的一个方法,该方法具有根据传入的类类型检索implementation class的映射。

答案 5 :(得分:0)

此处ClientResponse.classClass<ClientResponse>的实例。通常,Class对象表示对象的类型。创建新实例时:

Object obj = new ClientResponse()

您可以通过调用:

来检索该对象的类(类型)
obj.getClass()

那么,你为什么要传递Class个物体呢?它不常见,但一个原因是允许某些方法创建给定类的任意数量的实例:

ClientResponse resp = ClientResponse.newInstance();

答案 6 :(得分:0)

可以使用Class对象的很多方法。这用于反射。以下链接可以帮助您了解更多信息。

http://docs.oracle.com/javase/tutorial/reflect/class/classNew.html

答案 7 :(得分:0)

每当我们编译任何Java文件时,编译器都会嵌入一个名为public的{​​{1}},staticfinal字段,其类型为class,发出的字节码。由于此字段为java.lang.Classpublic,因此我们可以使用点符号和类名来访问它,因为它是static