欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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所示。

Java中的getClass()方法

                                                                                                  图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();