.class和getClass()深度理解

时间:2020-01-29 16:23:05 类型:JAVA
字号:    

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

————————————————
版权声明:本文为CSDN博主「youngogo」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/youngogo/article/details/82080425


<