Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取类类型对象的方法_Java - Fatal编程技术网

Java 获取类类型对象的方法

Java 获取类类型对象的方法,java,Java,在我的课本中,我可以读到: 如果T是任何Java类型,则T.class是匹配的类对象。例如: Class cl1 = Date.class; // if you import java.util.*; Class cl2 = int.class; Class cl3 = Double[].class; if (e.getClass() == Employee.class) 稍后我会读到: 虚拟机为每种类型管理一个唯一的类对象。因此,您可以使用=操作符来比较类对象。例如: Class cl1

在我的课本中,我可以读到:

如果T是任何Java类型,则
T.class
是匹配的类对象。例如:

Class cl1 = Date.class; // if you import java.util.*; 
Class cl2 = int.class;
Class cl3 = Double[].class;
if (e.getClass() == Employee.class)
稍后我会读到:

虚拟机为每种类型管理一个唯一的类对象。因此,您可以使用
=
操作符来比较类对象。例如:

Class cl1 = Date.class; // if you import java.util.*; 
Class cl2 = int.class;
Class cl3 = Double[].class;
if (e.getClass() == Employee.class)
您能帮我在文档中找到关于.class字段的任何信息吗。 还有一个问题-我不明白
e.getClass()==Employee.class
是否与
e.class==Employee.class
相同。我的意思是,如果它是相同的,那么为什么教科书的作者在这里使用左手表达式中的
getClass

来自:

类文字是由类、接口、数组或基元类型的名称或伪类型void,后跟“.”和标记类组成的表达式。
C.class的类型是class,其中C是类、接口或数组类型的名称(§4.3)

因此,
Date.class
int.class
只不过是类文本,它们为类类型提供了适当的
class
对象

我不明白e.getClass()==Employee.class是否与e.class==Employee.class相同

不,它们不一样。事实上,
e.class
甚至不会编译。根据上面对类文本的定义,由于
e
不是类型,而是
Employee
的对象(我假设),
e.class
不是有效的类文本。要使用类的实例获取类的类对象,需要使用方法

因此,
e.getClass()
Employee.class
是获取
Employee
类的
class
对象的两种不同方法。这两种方法都可以在不同的情况下使用。当您知道类类型时,请使用第二个版本;当您有类的实例时,请使用第1个版本

但是,请注意,在继承的情况下,
e.getClass()
可能不会返回与
Employee.Class
相同的类对象。前者将返回实际子类对象的Class对象,由引用
e
引用,而后者将始终为您提供
Class

如果既没有实例,也没有可用的类类型,则还可以使用-method以字符串形式获取类名的类对象。

来源:

类文字是由类、接口、数组或基元类型的名称或伪类型void,后跟“.”和标记类组成的表达式。
C.class的类型是class,其中C是类、接口或数组类型的名称(§4.3)

因此,
Date.class
int.class
只不过是类文本,它们为类类型提供了适当的
class
对象

我不明白e.getClass()==Employee.class是否与e.class==Employee.class相同

不,它们不一样。事实上,
e.class
甚至不会编译。根据上面对类文本的定义,由于
e
不是类型,而是
Employee
的对象(我假设),
e.class
不是有效的类文本。要使用类的实例获取类的类对象,需要使用方法

因此,
e.getClass()
Employee.class
是获取
Employee
类的
class
对象的两种不同方法。这两种方法都可以在不同的情况下使用。当您知道类类型时,请使用第二个版本;当您有类的实例时,请使用第1个版本

但是,请注意,在继承的情况下,
e.getClass()
可能不会返回与
Employee.Class
相同的类对象。前者将返回实际子类对象的Class对象,由引用
e
引用,而后者将始终为您提供
Class


如果既没有实例,也没有可用的类类型,那么还可以使用-method以字符串形式获取类名的类对象。

如何获取类对象取决于您已经知道的内容。如果某个对象被x引用,则可以通过x.getClass()获取其类的类对象。如果您知道,在编写代码时,类型T的名称,您可以使用T.class来获取类对象。还有第三种不太方便的方法,它只需要运行时访问类名

在中,getClass方法被描述为对象方法之一

类文本(T.Class形式)在中进行了描述


第三种方法使用API文档中定义的一种静态forName方法。

如何获取类对象取决于您已经知道的内容。如果某个对象被x引用,则可以通过x.getClass()获取其类的类对象。如果您知道,在编写代码时,类型T的名称,您可以使用T.class来获取类对象。还有第三种不太方便的方法,它只需要运行时访问类名

在中,getClass方法被描述为对象方法之一

类文本(T.Class形式)在中进行了描述


第三种方法使用API文档中定义的静态forName方法之一。

e.class
(假设
e
不是
class
)不是有效的代码行。类被称为“类文字”。@Josh M,我听不懂你说的,对不起。在我的教科书中,我读到:“请注意,Classobject实际上描述了一种类型,它可能是类,也可能不是类。例如,intis不是类,但int.classis仍然是class类型的对象。”@peedint Queue,我已经研究了这两种类型。你能澄清一下我应该在文档中查找这些类的确切位置吗?@Kifsif,