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

原博客链接:java中getClass( )和class()的联系和区别

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在运行到这一时刻时所属的类型

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,895评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,292评论 19 139
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,924评论 0 62
  • 毕业两年,换过两次工作,一直找不到方向,浑浑噩噩,看了很多篇心灵鸡汤,自己无数次的心里暗示,年轻人不要浮躁,可是怎...
    ZeroLing_1934阅读 838评论 0 0
  • 今日复离家,何时可尚还? 悼影薄如洗,悲发梳未全。 跳梁名无落,孤蓬身半悬。 此心难如月,常在天上圆。
    微云洞主阅读 2,415评论 0 4