Java中的getClass()方法
程序员文章站
2024-03-17 08:09:40
...
我们知道在Java中一切都是对象,我们一般所使用的对象都直接或间接继承自Object类。Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类。
类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,在Java使用类型类来表示一个类型。所有的类型类都是Class类的实例。看下面面一段程序:
public class GetClassTest
{
public static void main(String[] args)
{
A a = new A();
B b = new B();
A c = new B();
A d = new A();
System.out.println(a.getClass() + "---" + a.getClass().hashCode());
System.out.println(b.getClass() + "---" + b.getClass().hashCode());
System.out.println(c.getClass() + "---" + c.getClass().hashCode());
System.out.println(d.getClass() + "---" + d.getClass().hashCode());
System.out.println("******");
if(a.getClass() == b.getClass())
System.out.println(a.getClass() + "=" + b.getClass());
else
System.out.println(a.getClass() + "!=" + b.getClass());
if(a.getClass() == c.getClass())
System.out.println(a.getClass() + "=" + b.getClass());
else
System.out.println(a.getClass() + "!=" + c.getClass());
if(b.getClass() == c.getClass())
System.out.println(b.getClass() + "=" + c.getClass());
else
System.out.println(b.getClass() + "!=" + c.getClass());
System.out.println("******");
a.printTest();
a.printTest2();
a.printTest3();
}
}
class A
{
public void printTest()
{
System.out.println(super.getClass());
}
public void printTest2()
{
System.out.println(this.getClass());
}
public void printTest3()
{
System.out.println(getClass().getSuperclass());
}
}
class B extends A
{}
编译并运行,见图1所示。
图1
分析图1,
class A---366712642
class B---1829164700
class B---1829164700
class A---366712642
可知,每个类只对应一个Class对象。
class A!=class B
class A!=class B
class B=class B
******
class A
class A
class java.lang.Object
可知,getClass()返回的是对象运行时的类型,与this,super等关键字的引用无关,所以getClass(),this.getClass()和super.getClass()返回的都是"Class A"。如果想要得到父类的名称,应该用如下代码:
getClass().getSuperclass();