Java反射学习

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

1,获得类型类

我们知道在Java中一切都是对象,我们一般所使用的对象都直接或间接继承自Object类。Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类。类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,在Java使用类型类来表示一个类型。所有的类型类都是Class类的实例。例如,有如下一段代码:

A a = new A();

if(a.getClass()==A.class)

System.out.println("equal");

else System.out.println("unequal");

结果就是打印出 “equal”。

可以看到,对象a是A的一个实例,A某一个类,在if语句中使用a.getClass()返回的结果正是A的类型类,在Java中表示一个特定类型的类型类可以用“类型.class”的方式获得,因为a.getClass()获得是A的类型类,也就是A.class,因此上面的代码执行的结果就是打印出 “equal”。特别注意的是,类型类是一一对应的,父类的类型类和子类的类型类是不同的,因此,假设A是B的子类,那么如下的代码将得到 “unequal”的输出:

A a = new A();

if(a.getClass()==B.class)

System.out.println("equal");

else System.out.println("unequal");

因此,如果你知道一个实例,那么你可以通过实例的“getClass()”方法获得该对象的类型类,如果你知道一个类型,那么你可以使用“.class”的方法获得该类型的类型类。

2,获得类型的信息

在获得类型类之后,你就可以调用其中的一些方法获得类型的信息了,主要的方法有:

getName():String:获得该类型的全称名称。

getSuperClass():Class:获得该类型的直接父类,如果该类型没有直接父类,那么返回null。

getInterfaces():Class[]:获得该类型实现的所有接口。

isArray():boolean:判断该类型是否是数组。

isEnum():boolean:判断该类型是否是枚举类型。

isInterface():boolean:判断该类型是否是接口。

isPrimitive():boolean:判断该类型是否是基本类型,即是否是int,boolean,double等等。

isAssignableFrom(Class cls):boolean:判断这个类型是否是类型cls的父(祖先)类或父(祖先)接口。

getComponentType():Class:如果该类型是一个数组,那么返回该数组的组件类型。

转载于:https://www.cnblogs.com/chen-jack/p/7910409.html

java getClass()相关推荐

  1. java getclass()函数

    java的getClass()函数 Java反射学习 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这 ...

  2. Java toString()方法

    Java toString method is a very useful method and even though you may not know it, I am sure you have ...

  3. class和getClass()的区别

    前几天做项目,觉得自己都开发一年多了,还没有自己封装的类,感觉真是白做了,再加上,看到自己的代码,我都不忍心看,有的时候,还需要自己去读自己写的代码,乱乱糟糟的,实在不忍心看,没办法,重现在开始吧,把 ...

  4. Java getParentFile().mkdirs()用法

    Java getParentFile().mkdirs()用法 getParentFile(); getParentFile()的作用是获得父目录 文件路径最后一层会被默认为是一个文件 例如 URL ...

  5. Java equals()和hashCode()

    介绍: Java Object类提供了方法的基本实现– hashCode()和equals(). 这些方法非常有用,尤其是在使用Collection框架时. 哈希表实现依赖于这些方法来存储和检索数据. ...

  6. 网络爬虫之java基础(Ⅰ)

    目录 1Java中maven的使用 2log4j log4j的介绍 log4j提供的几种方法 使用步骤 3输入流与输出流 数据的读写程序以及map的使用 这张图为我给自己研究所人讲网络爬虫的一个流程, ...

  7. Java - 加号(+)的作用

    1.java中加号(+)有两个作用:加法运算.连接符 加法运算 public class Test{public static void main(String[] args){int intA = ...

  8. java static getclass_如何从Java中的静态方法调用getClass()?

    如何从Java中的静态方法调用getClass()? 我有一个必须有一些静态方法的类. 在这些静态方法中,我需要调用方法getClass()来进行以下调用: public static void st ...

  9. 为什么String中的Java hashCode()使用31作为乘数?

    本文翻译自:Why does Java's hashCode() in String use 31 as a multiplier? Per the Java documentation, the h ...

最新文章

  1. 这样规范写代码,同事直呼“666”
  2. 20172328《程序设计与数据结构》实验二:树
  3. Promise--感性认知
  4. PHP——explode的应用(获取字符串,拆为下拉列表)
  5. 数制之非十进制数转十进制数
  6. Docker容器私有仓库——Harbor私有仓库的搭建
  7. 4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授
  8. wxWidgets:wxSocketBase类用法
  9. php 递归合并类 call,PHP多个数组合并(递归的进行)
  10. Java——线程锁,死锁,等待唤醒机制
  11. shell脚本拼接中间带空格的两个变量成一个变量
  12. 上网时间监控软件_电脑监控系统软件有哪些作用?主要功能有哪些?
  13. Spring Cloud Netflix之Eureka上篇
  14. dlink虚拟服务器端口转发,D-Link路由器端口转发怎么设置【图文教程】
  15. 密码编码学初探——消息认证码
  16. 鼠标经过时改变DIV背景颜色的三种途径
  17. 聚划算创意新零售,这个“加油站”不加油只加奶?
  18. python基础----Day05
  19. 教你如何写出完美的论文——5. 做笔记
  20. Unity中实现动态天空盒

热门文章

  1. php is_null(,PHP empty() isset() is_null() 区别与性能比较
  2. java取两个10_30的随机整数_产生10个[30,90]区间上的随机整数,然后对其用选择法...
  3. Jupyter Notebook简介及默认路径修改
  4. PAT_B_1059_Java(14分)_C++(20分)
  5. css 透明背景_css 中多种边框的实现小窍门
  6. ipad分屏_iPad如何分屏及常见问题
  7. Codeforce 1255 Round #601 (Div. 2) C. League of Leesins (大模拟)
  8. eclipse打包jar发布到linux下运行出错(java.lang.ClassNotFoundException: cmd.WordCount$MyMapper )
  9. 深入理解C语言——#define宏和枚举的区别
  10. 施密特触发器(Schmitt Trigger)?