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