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反射的应用

反射在java中的应用
  • lidaasky
  • lidaasky
  • 2014年07月13日 09:54
  • 1598

Java反射机制与应用

JAVA反射机制     JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能...
  • xiaoxian8023
  • xiaoxian8023
  • 2013年06月30日 20:45
  • 9465

Java反射在开发中的一些应用

有的时候,我们在开发的时候,由于要考虑到代码的重用性,自然而然的就会想到用反射来处理一些问题。 借用:java反射机制应用场景 一文 反射机制实现:  1)导出文件(1-4)  2)结果集在页面的显示...
  • xiaobangsky
  • xiaobangsky
  • 2014年01月07日 17:26
  • 3155

java annotation+反射的应用记录

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

java反射简单理解

今天又看了一次java反射的视频,为啥说是又呢,那是因为前一段时间看的时候走马观花,心浮气躁,头晕目眩……。准确的说是因为上次看的时候觉得自己虽然对java不熟,但是.net中的反射还是用过的,所以看...
  • the_fire
  • the_fire
  • 2010年11月18日 23:58
  • 4549

java动态与反射的基本原理及实际应用

java动态与反射的基本原理及实际应用             java动态与反射的基本原理及实际应用                  要想深入研究java...
  • xuchuangqi
  • xuchuangqi
  • 2016年08月07日 22:59
  • 427

Java反射概念及类的反射

Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接...
  • wangliaizq10000
  • wangliaizq10000
  • 2011年02月28日 19:51
  • 5825

反射机制的运用

前边一篇博客写过相关反射机制的基础知识:java中的反射机制。写完这篇后有一条评论“反射反射程序员的快乐”,为什么说“快乐呢”,咱们看看反射的强大功能吧!这篇博客简单说一下反射机制的运用。      ...
  • liujiahan629629
  • liujiahan629629
  • 2014年02月22日 19:48
  • 3076

C#反射应用

 转自:http://www.cnblogs.com/zzyyll2/archive/2007/10/23/934016.html 1.何谓反射? 反射就是在运行的时候发现对象的相关信息...
  • Yoryky
  • Yoryky
  • 2015年03月30日 15:01
  • 269

Java 反射机制的用途和缺点

反射的用途反射被广泛地用于那些需要在运行时检测或修改程序行为的程序中。这是一个相对高级 的特性,只有那些语言基础非常扎实的开发者才应该使用它。如果能把这句警示时刻放在心 里,那么反射机制就会成为一项强...
  • cnzl0123
  • cnzl0123
  • 2017年06月19日 11:27
  • 941
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java反射的应用
举报原因:
原因补充:

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