设为首页 加入收藏

TOP

Java反射详解
2018-01-17 13:04:49 】 浏览:139
Tags:Java 反射 详解

反射是指程序在运行时能够获取自身的信息. Java的反射机制将类和方法封装为对象, 允许程序动态的创建对象或调用方法.


java.lang.Class是反射机制的核心封装类, 通常有三种方法可以获得类的Class对象.


为了便于说明创建一个Item类:


通过Class对象可以访问类的元信息:


通过Class对象调用默认构造器进行实例化:


不过这样只能调用默认构造器, 若要使用其它构造器实例化则需要先获得构造器对象:


也可以通过Class对象获得构造器的列表:


Constructor.newInstance()方法可以用于实例化类. 示例:


可以同通过Class对象获得Method对象访问类的方法:


getMethod()第一个参数为方法的名称, 后面的可变参数表示目标方法的参数表. 两者共同标记类中的一个方法.


invoke()方法第一个参数为调用方法的实例, 后面为方法的实参表.


访问无参数的方法也很简单:


有两个方法用于获得方法:


类似地, 有两个方法用于获得方法列表:


int Method.getModifiers()用于获得public, static等修饰符. 修饰符由标志位(BitSet)标示, 被转换成int返回.


可以使用java.lang.reflect.Modifier检查标志符类型:


直接调用私有方法Method对象的invoke方法时会抛出IllegalAccessException异常, 需要先调用method.setAccessible(true):


访问域与访问方法非常类似:


访问私有域同样需要setAccessible(true).


Field对象可以访问或修改域:


Java的反射机制允许在运行时获得泛型参数, 需要获得泛型参数的场景有:


java.lang.reflect.Type接口用于描述泛型参数, Type接口的唯一实现是Class类.


获得域的类型:


获得泛型方法参数类型:


获得泛型方法的返回值类型:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java泛型详解 下一篇HashMap源码阅读与解析

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目