java中getClass( )和class()的联系和区别

Posted xingjiarong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中getClass( )和class()的联系和区别相关的知识,希望对你有一定的参考价值。

转载请注明出处:http://blog.csdn.net/xingjiarong/article/details/47908521
java有两个获得类名的方法getClass()和class(),这两个方法看似一样,实则不然。这两个方法涉及到了java中的反射。

反射

所谓反射,可以理解为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代码。严格地说,反射并非编程语言的特性,因为在任何一种语言都可以实现反射机制,但是如果编程语言本身支持反射,那么反射的实现就会方便很多。

类型类
我们知道在Java中一切都是对象,我们一般所使用的对象都直接或间接继承自Object类。Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类。类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,在Java使用类型类来表示一个类型。所有的类型类都是Class类的实例。

联系
一般情况下,getclass()方法和class()方法是等价的,都可以获得一个类型名,例如下面的代码:

class A
    public void func()

    


public class Test 

    public static void main(String[] args) 
        A a = new A();
        System.out.println(a.getClass()+" "+A.class);
    


输出的结果为:class A class A

区别:
两者最直接的区别就是,getClass()是一个类的实例所具备的方法,而class()方法是一个类的方法。
另外getClass()是在运行时才确定的,而class()方法是在编译时就确定了。

例如下面的程序:

class A
    public void func()

    


class B extends A


public class Test 

    public static void main(String[] args) 
        A a = new A();
        B b = new B();
        A ab = new B();
        System.out.println(a.getClass()+" "+A.class);
        System.out.println(b.getClass()+" "+B.class);
        System.out.println(ab.getClass());
        ab = a;
        System.out.println(ab.getClass());
    



结果:
class A class A
class B class B
class B
class A

从最后的结果为class B来看,当出现继承和多态时,getclass和class方法的确实有所不同,因为是在运行时确定的,所以结果是ab在运行到这一时刻是所属的类型。

以上是关于java中getClass( )和class()的联系和区别的主要内容,如果未能解决你的问题,请参考以下文章

java中类名.class实例.getclass()区别

java中类名.class, class.forName(), getClass()区别

在java中t.getClass为啥返回的是Class<gt;而不是Class<T>

.getClass();

java中class和class有啥区别

java.lang.Class java.lang.Object.getClass()' 在空对象引用上