首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类实例的查询

类实例的查询
EN

Stack Overflow用户
提问于 2014-06-20 06:25:56
回答 2查看 206关注 0票数 0

Java中的每个对象都属于某个类。这就是为什么由所有其他类继承的Object类定义了getClass()

getClass()方法返回Class类的实例。

例如:

代码语言:javascript
运行
复制
class Foo{}
class Sample{ class Foo instance = Foo(); Class obj = instance.getClass(); }

获取Class类实例的另一种方法是使用Foo.class

我的问题是:

我可以在getClass()类源代码(FileObject.java package java.lang)中看到Object的定义。在哪个源文件中,我能看到作为Foo.class使用的成员Foo.class吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-20 07:17:39

没有源文件。class是关键字(如thisinstanceof等),不是任何类的成员,由编译器处理,而不是在代码中处理。

票数 1
EN

Stack Overflow用户

发布于 2014-06-20 06:45:18

如果一个对象的实例是可用的,那么获取它的类的最简单方法就是调用Object.getClass()

代码语言:javascript
运行
复制
Foo foo=new Foo();
Class c = foo.getClass();

如果类型是可用的,但是没有实例,那么可以通过在类型的名称后面添加.class来获得一个类。这也是获取基元类型的类的最简单方法。

代码语言:javascript
运行
复制
boolean b;
Class c = boolean.class; 

这将产生编译时错误。

代码语言:javascript
运行
复制
Class c = b.getClass();   

因为布尔值是一个基本类型,不能取消引用。

像这样的事情

代码语言:javascript
运行
复制
Foo foo=null;

请注意,在这种情况下不能使用foo.getClass(),因为它没有实例化。

最后,像这样的事情

代码语言:javascript
运行
复制
Foo foo=new FooChild();
Class c= foo.getClass(); //returns FooChild, evaluates at runtime
Class c= Foo.class;// returns Foo , evaluates statistically at compile-time.

编辑:-对于.class,它是每个基本类型( static Class<Integer>,代表整数的类实例)中的一个静态字段。您可以在这里看到它为整数,这里这里为布尔值。布尔、字节、字符、短、int、长、浮点数和双倍都有一个Class静态字段,因为就像我所说的,它总是保持不变,而且不能取消原语类型的引用。要查看源代码,如果您看到Integer的源代码,您可以看到类字段为public static final Class<Integer> TYPE = (Class<Integer>) VMClassLoader.getPrimitiveClass('I');,请参见这里第82行。你也可以搜索和看到其他人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24321182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档