.class和getClass()深度理解

能用一句话说清楚的绝不多说,能从原理讲起的,绝不从表面讲解。

java有两个获得类名的方法getClass()和class(),这两个方法看似一样,实则不然。这两个方法涉及到了java中的反射。.class 用于类  而 getClass()用于对象。.class和getClass()使用java程序可以得到运行时的类,其实得到就是 Class<T> 一个泛型 的 Class对象 T就是你所调用对象的运行时的类 的类型。

反射

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

联系
一般情况下,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 Father{
public void showName()
{
 System.out.println("Father...");
}
}
class Child extends Father{
public void showName()
{
 System.out.println("children");
}
}

Father father = new Child();

System.out.println(Father.class);  结果是 Father

System.out.println(father.getClass()); 结果是Child

Class主要用于反射机制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章