搜索热词

java有两个获得类名的方法getClass()和class(),这两个方法看似一样,实则不然。这两个方法涉及到了java中的反射。

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

类型类

要知道类型信息在运行时是如何表示的,这是由Class对象来完成的,它包含了与类有关的信息。Class对象就是用来创建所有“常规”对象的,Java使用Class对象来执行RTTI,即使你正在执行的是类似类型转换这样的操作。

每个类都会产生一个对应的Class对象,也就是保存在.class文件。所有类都是在对其第一次使用时,动态加载到JVM的,当程序创建一个对类的静态成员的引用时,就会加载这个类。Class对象仅在需要的时候才会加载,static初始化是在类加载时进行的。

我们知道在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);

}

}

输出的结果为:classAclassA

区别:

两者最直接的区别就是,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 反射 getclass_JAVA反射机制中getClass和class对比分析相关推荐

  1. java 反射 getclass_java 反射getClass .class 的使用方法示例

    本文实例讲述了java 反射getClass .class 的使用方法.分享给大家供大家参考,具体如下: java反射机制 怎么从一个实例上的获得类反射 /** * obj 实例的对象 * getCl ...

  2. 四大国内外开源的java工作流程引擎,流程快速开发平台对比分析选型

    为了更好的帮助大家找到适合自己的流程引擎,快速的完成流程引擎技术架构选型,快速的完成项目交付我们找到了4个开源的java工作流引擎,一些应用环境对比分析. 希望您能从中找到适合您自己的流程引擎. 工作 ...

  3. java 反射 getclass_Java反射中的getClass()方法

    Java反射学习 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代 ...

  4. java equals getclass_java中instanceof和getClass()的作用

    初学者难免有点混淆java中instanceof和getClass()的作用,  下面就来一一讲解. 父类A: class A { }    子类B: class B extends A { }    ...

  5. java object.getclass_Java Object类,getClass()方法介绍

    前面有给大家介绍一下Java Object类equals()方法方面的知识,下面的话就要来介绍一下Java Object类getClass()方法方面的知识. getClass()方法返回对象所属的类 ...

  6. 农用圆形打捆机行业调研报告 - 市场现状分析与发展前景预测

    农用圆形打捆机市场的企业竞争态势 该报告涉及的主要国际市场参与者有John Deere.American Baler Co..International Baler.McHale.Takakita C ...

  7. 径向涡轮膨胀机行业调研报告 - 市场现状分析与发展前景预测

    出版商:贝哲斯咨询 获取报告样本: 企业竞争态势 径向涡轮膨胀机市场报告涉及的主要国际市场参与者有Cryostar.Atlas Copco.GE Oil & Gas.Air Products. ...

  8. 卷片机行业调研报告 - 市场现状分析与发展前景预测

    出版商:贝哲斯咨询 获取报告样本: 企业竞争态势 该报告涉及的主要国际市场参与者有FAS Converting Machinery.Windmoeller and Hoelscher.SML Masc ...

  9. 两级压缩机行业调研报告 - 市场现状分析与发展前景预测

    出版商:贝哲斯咨询 获取报告样本: 企业竞争态势 该报告涉及的主要国际市场参与者有WABCO Holdings Inc.Atlas Copco.Baker Hughes (a GE Company). ...

最新文章

  1. 基于css3 transform实现散乱的照片排列
  2. 《训练指南》——6.9
  3. RTA 广告产品能力详解
  4. 简述python程序的运行原理_谈谈 Python 程序的运行原理
  5. 【技术文档】jeecg3.7-maven搭建环境入门 - 老版本
  6. 开源TinyXML 最简单的新手教程
  7. jQuery中,$.extend,$obj.extend和$.fn.extend三者的区别
  8. 在固态硬盘上安装linux系统怎么安装,教程|教你一键重装怎么将系统安装在固态硬盘上...
  9. java move函数重新调用_Move Method (搬移函数)
  10. MarkDown表格合并
  11. gis连接表格到数据库失败_arcgis连接到数据库失败,常规功能故障
  12. 游戏技巧-《文明6》的C盘爆满问题
  13. 微信小程序自定义编译模式
  14. 用vuejs仿网易云音乐(实现听歌以及搜索功能)
  15. Java程序员修炼之路
  16. 如何使用ssh连接windows?
  17. HTML5新特性history
  18. c语言程序设计教程南京大学出版社答案,《新编C语言程序设计教程》习题解答与实验指导...
  19. Python实现按键精灵功能
  20. Android studio 使用androidX后应用启动log中报Didn‘t find class “android.view.View$OnUnhandledKeyEventListener“

热门文章

  1. numpy.fft 实现 czt (Chirp Z-transform)
  2. SQL错误代码弹出提示信息类
  3. 人脸裁剪 人脸识别图片裁剪 多人脸裁剪
  4. 基于DS3231时钟模块的stm32 程序,源码
  5. air 开发 android,简介开发运行于Android的AIR程序
  6. 应用rs-485总线智能仪表实现计算机远程数据采集与监控,基于RS-485总线选矿厂电气控制系统的设计与实现本科毕业论文.doc...
  7. 一个真正成熟的人,从不在意别人的评价
  8. 智能建筑工程应用问题调查报告
  9. 建设方案|智慧水务信息化平台建设
  10. 软件工程(七)软件系统设计