在Java中,假设我们有一个名为Foo的类,obj.getClass().getName()和Foo.class.getName()如何获取相同的结果?
假设我有一个名为Foo的类的实例。当我调用abc.getClass().getName()时,我相信我实际上是在调用类“”。getName()。所以,我的问题是,这与Foo.class.getName()有什么相同之处?Foo.class.getName()是本机实现吗?在Java中,假设我们有一个名为Foo的类,obj.getClass().getName()和Foo.class.getName()如何获取相同的结果?,java,class,object,Java,Class,Object,假设我有一个名为Foo的类的实例。当我调用abc.getClass().getName()时,我相信我实际上是在调用类“”。getName()。所以,我的问题是,这与Foo.class.getName()有什么相同之处?Foo.class.getName()是本机实现吗?Foo.class是类型为class的静态实例;在运行时只有一个这样的实例* 如果obj的类型为Foo,则obj.getClass()根据定义返回Foo.class *如果您有多个类加载器,这可能会变得奇怪,我的知识在这一点上
Foo.class
是类型为class
的静态实例;在运行时只有一个这样的实例*
如果obj
的类型为Foo
,则obj.getClass()
根据定义返回Foo.class
*如果您有多个类加载器,这可能会变得奇怪,我的知识在这一点上变得模糊…如果您在
Foo
的实例上调用getClass()
,返回类型是Classyou调用元素上的getClass,要么是类(您是什么类?)要么是实例(您是什么类的实例?)由于两者都是相同的,所以它们返回的结果是相同的。谢谢,这是有意义的-Foo.class是实例,但实例可以有一个。以他们的名义?这可能是一个愚蠢的基本问题。@abhishekpalakkalliyath:Foo.class
只是一个表达式,其计算结果引用了唯一的类
实例;它不是一个变量名(或类似的名称)。谢谢-那么,Foo.class在哪里-什么保存它-比如哪个对象的实例保存Foo.class?-它是JVM吗?这样的表达式有名称吗?像班级象征吗?哦,是的!类文本!
Foo instanceOfFoo = new Foo();
assertEquals(Foo.class, instanceOfFoo.getClass()); // Succeeds
instanceOfFoo = new SubTypeOfFoo();
assertEquals(Foo.class, instanceOfFoo.getClass()); // Fails.