为什么在Java中这是可能的:this.getClass()。getClass()。getClass()....等

时间:2013-10-14 15:24:51

标签: java class

为什么在Java中可以实现这一点:

this.getClass().getClass().getClass().getClass()...

为什么会出现这种无限递归?

好奇。

5 个答案:

答案 0 :(得分:10)

这里没有无限递归:getClass()返回一个java.lang.Class对象,它本身就是一个java.lang.Object对象,因此它支持getClass()方法。在第二次拨打getClass()后,无论您拨打getClass()多少次,您都会获得相同的结果。

答案 1 :(得分:4)

Class对象仍然是一个对象,由于存在getClass,您可以在任何对象上调用Object#getClass。所以你得到:

this.getClass(); // Class<YourClass>
this.getClass().getClass(); // Class<Class<YourClass>>
this.getClass().getClass().getClass(); //Class<Class<Class<YourClass>>>

最终,这个庞大的程序会耗尽堆栈内存,时间或磁盘空间,或者达到Java内部限制。

答案 2 :(得分:2)

每个类都扩展了Object类。 Class作为一个类本身,它继承了getClass()方法。允许您拨打Class#getClass().getClass()等等。

答案 3 :(得分:1)

那不是递归。

递归是一个方法在最终返回之前调用自身(松散地定义)有限次数的地方。

例如:

public int sumUpTo(int i) {
    if (i == 1) {
        return 1;
    } else {
        return i + sumUpTo(i-1);
    }
}

你所做的就是调用一个方法来获取这个对象的类,然后获取类的类(java.lang.Class),并在你需要输入的时候重复它。

答案 4 :(得分:1)

public final Class<? extends Object> getClass()

getClass()返回一个Class对象。由于Class是Object的衍生物,因此它也有一个getClass方法。你应该打印几次迭代。第一次通话后你应该注意到一个重复的模式...