Java反射的应用
来源:互联网 发布:中国法律 知乎 编辑:程序博客网 时间:2024/05/18 02:26
最近想了解一下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反射的应用
- Java反射的应用
- java反射的应用
- java反射的应用
- 《Java反射的应用》
- java反射的应用
- Java反射-------构造方法的反射应用
- java反射(3)--反射的应用
- java反射的简单应用
- JAVA反射机制的应用
- java反射机制的应用
- java反射(Field的应用)
- Java反射的应用1
- java 中反射的应用
- Java中的反射的应用
- java反射 beaninfo的应用
- java反射机制的应用
- 虚幻4UMG的锚点
- el表达式跟ognl表达式的区别(用法和页面取值)
- Swift之文件管理
- 方向梯度直方图(HOG,Histogram of Gradient)学习笔记二 HOG正篇
- Java转Android开发不得不知的一些经验
- Java反射的应用
- cas 服务端https安装部署。
- 2012年5月SAT香港真题解析
- ListView自定义样式
- u-boot移植
- ClassNotFoundException
- Visual Studio + VA 常用快捷键
- Linux系统抓取数据包
- POJ 2390 Bank Interest(水~)