Java反射的应用

原创 2015年07月10日 11:48:38

    最近想了解一下SSH源码, 框架大部分功能实现用到了反射,所以花时间研究了一下。

    何为反射?白话就是通过一个类获得它的对象,方法,成员变量;通过一个对象,调用它的任意一个方法和对象;

    刚开始学反复强调:OOP中万事万物皆对象,而类, 是Class类的对象.

反射中,动态加载一个类的方式有三种:(拿Car类举例)

Class car1 = Car.class;

Class car2 = new Car().class;

Class car3 = Class.forName("com.car.Car");

现在car1,car2,car3就分别表示了Car类的类类型(class type);


获得一个类的基本信息:

Class car1 = Car.class;

System.out.println("类名:" + car1.getName());

//获取这个类的方法

Method[] method = car1.getMethods();

/*

 *这里要说一下,getMethods()获得的是所有public修饰的方法,包括从父类继承而来的;

 *而getDeclaredMethods()是获得所有本类生命的方法,无视访问权限;

 *同样的用法还有getFields 和 getDeclaredFields(获得成员变量),getConstructors 和 getDeclaredConstructors(获得构造方法)等

 */

for(Method method : methods){
            
            System.out.print("方法名称" + method.getName());//得到方法名称
            //得到参数列表类型的class type
            Class[] paramTypes = method.getParameterTypes();
            
            for(Class paramType : paramTypes){
                System.out.print(paramType.getSimpleName());//获得参数信息
            }
            System.out.println("返回值类型:" + method.getReturnType().getName());//getReturnType()得到的是方法返回值类型的class type
 }



//获取这个类的成员变量


Field[] field = car1.getFields();
for(Field field : fields){
            //得到成员变量类型的class type
            Class fieldType = field.getType();
            //得到成员变量名称
            String fieldName = field.getName();
            //得到成员变量类型
            String fieldTypeName = fieldType.getName();
            System.out.println("成员变量类型:" + fieldType + ";成员变量名称" + fieldName );
 }


//获取构造函数

Constructor[] cs = car1.getDeclaredConstructors();
        for(Constructor constructor : cs){
            System.out.print("构造方法:" + constructor.getName() + "(");
            //获取构造函数的参数列表 -->获得的是参数列表的类类型
            Class[] paramTypes = constructor.getParameterTypes();
            for(Class paramType : paramTypes) {
                System.out.print(paramType.getName() + ",");
            }
            System.out.println(")");
 }


/*

 *方法的反射

 *用Method的对象进行方法调用 等同于 对象.方法名(参数);

 */

//获取Car类的test(int a,Stringb)方法

Method method = car1.getDeclaredMethod("test",new Class[]{int.class,String.class});

//调用该方法

Object returnValue = method.invok(car1,new Object[]{2,"test"});

//returnValue就是"test"方法的返回值



相关文章推荐

java annotation+反射的应用记录

使用java 的annotation和反射的小例子,记录下来以供参考, 实现的功能是 配置页面可以动态选择一个实现检核接口的类,保存输入的参数,在真正检核时传入保存的参数 配置页面如下:第一行选择...
  • qlql489
  • qlql489
  • 2015年07月21日 15:09
  • 164

java 反射的学习已经扩展应用

反射的应用  * Class 表示内存中的字节码  * 得到字节码的方法有三种  * 1、类名.class  例如Date.class  * 2、对象.getClass()  例如new Date()...

Java_反射的基本应用

------------------------------------------------------------android培训、java培训、期待与您交流! ---------- ...

Android中java反射的应用

首先呢,依旧是考虑出于什么原因,才会让我们使用这块知识点的。某天,我在前人的代码中发现了getClass()、Class这之类的字眼,由于看不懂这些东西,导致我看这个类都不好了,总想着有块硬茬。不怕,...

java基础——反射的应用

二、反射的应用 (一)实现框架功能 public static void main(String[] args) throws Exception{ /*用类加载器的方式管理资源和配置文件*/ //...
  • bao9107
  • bao9107
  • 2013年09月30日 22:09
  • 582

《Java反射的应用》

《Java反射的应用》最近在研究Java并发相关的类库,看到了AtomicIntegerFieldUpdater,这个类就是利用反射来完成原子更新字段的值。由于自己对反射相关的操作都忘记了,今天刚好借...

java反射的一些应用,望各大神给予指正

第一次写,很紧张,值得纪念的日子 2016-04-01(竟然是愚人节,我是个小白) 首先,这个是在项目里的一个功能,因为之前项目里都是写死的值,每个人写的时候都写一堆一堆的代码,一堆一堆的i...

Java反射的简单应用

反射机制在前后端交互中的简单应用

Java反射的应用 --- 内省

一、基础概念 内省(Introspector) 是Java 语言对 JavaBean 类属性、事件的一种缺省处理方法。Java JDK中提供了一套 API 用来访问某个属性的 getter/sett...

java反射的应用(Hibernate)

java反射的应用(Hibernate)          Hibernate是一个屏蔽了JDBC,实现了ORM的java框架,利用该框架我们可以抛弃掉繁琐的sql语句而是利用Hibernate中...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java反射的应用
举报原因:
原因补充:

(最多只允许输入30个字)