Java反射学习

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

1,获得类型类

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

A a = newA();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 = newA();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:如果该类型是一个数组,那么返回该数组的组件类型。

此外还可以进行类型转换这类的操作,主要方法有:

asSubclass(Class clazz):Class:将这个类型

-------------------------------------------------------------------------------------------------------------

注:本文转载于:http://www.cnblogs.com/lianghui66/archive/2012/12/03/2799134.html

java 反射 getclass_Java反射中的getClass()方法相关推荐

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

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

  2. 利用java反射调用类的的私有方法

    http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...

  3. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  4. java反射实现自定义json转对象方法-忽略字段大小写、字段个数

    java反射实现自定义json转对象方法-忽略字段大小写.字段个数 开发过程中经常会遇到json转对象,可以使用FastJson或者Gson自带的工具类进行转换,但当遇到json与对象属性名称大小写不 ...

  5. 利用Java反射机制调用类的私有方法

    利用Java反射机制调用类的私有方法 引言 来吧·展示 参考链接 引言 如何调用其他类的私有方法呢? 可以利用Java的反射机制,去调用其他类的私有方法 来吧·展示 package cn.learn. ...

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

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

  7. java 反射 getclass_JAVA反射机制中getClass和class对比分析

    搜索热词 java有两个获得类名的方法getClass()和class(),这两个方法看似一样,实则不然.这两个方法涉及到了java中的反射. 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传 ...

  8. Java 反射机制快速入门及常见方法全归纳。

    目录 一.反射机制 1.基本介绍 2.原理示意图 3.反射基本代码实现 4.反射性能 二.Class 类 1.基本介绍 2.获取 Class类对象的方式 3.有 Class对象的类 三.类加载 1.基 ...

  9. Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?

    文章目录 前言 一.私有方法在本类中直接调用 1.1.在本类中实例化,调用私有方法 1.2.尝试在其他类直接调用私有方法(错误示范) 二.使用反射实例化类强制调用私有方法 2.1.使用类加载器加载被调 ...

最新文章

  1. PCIE 硬件接口那点屁事
  2. ElasticSearch优化系列一:集群节点规划
  3. QT的QScriptEngine类的使用
  4. Java面试题40道
  5. css钢铁侠视角,CSS3 Iron Man 钢铁侠肖像
  6. asp:dropdownlist如何去掉三角箭头_一棵悬崖三角枫的培养过程
  7. 5亿整数的大文件,怎么排序 ?面试被问傻!
  8. mysql判断可用性,MySQL -- 主從復制的可靠性與可用性
  9. NC6.3 变更销售合同维护模板后单据追溯查询提示权限问题的解释
  10. 云服务器常见的几种防护方法
  11. COMSOL有限元仿真深度指南:如何分析更为复杂的材料各向异性结构?
  12. 计算机开机时间不对,为什么电脑每次开机时间都不对
  13. github网站进不去怎么办
  14. 魔百盒cm211-1_ZG-晶晨S905和CH-晶晨S905L3B线刷-刷机固件及教程
  15. 如何解决水平越权(横向越权)和纵向越权
  16. Vue+element通过接口上传图片给后端
  17. Python中的base64、base32实例
  18. 300iq Contest 3简要题解
  19. 互斥事件的概念和公式_2014-2015学年高二数学课件:《互斥事件的概率和加法公式》(湘教版必修五)...
  20. CDeC-Net代码实现

热门文章

  1. Intellij Idea 团队协同开发必备配置
  2. ELK-日志收集系统在Centos上环境安装
  3. 二叉搜索树/二叉排序树/二叉查找树
  4. 常量的两种定义方式比较
  5. 最新版MySQL 8.0 的下载与安装(详细教程)
  6. 笑话:流传硅谷的一则冷笑话
  7. 玛雅预言--真还是假,近期地震火山,接连不断(续)
  8. Android自定义View之实现流式布局
  9. vs2008 安装出错 Microsoft Visual Studio Web 组件安装失败
  10. Xcode6.1 OS X 10.10 打越狱包和免证书测试方法