Java的反射机制总结

一、Java反射机制是什么?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。(JAVA反射(放射)机制:程序运行时,允许改变程序结构或变量类型,这种语言称为“动态语言”)

二、Java反射机制能做什么?
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。

三、Java反射机制的调用:
1、获取类对象:
Class<?> clazz = Class.forName("包名.类名");
2、获取类的父类:
Class<?> parentClass = clazz.getSuperclass();
3、获取类实现的接口:
Class<?> intes[] = clazz.getInterfaces();
4、实例化对象:
实例化默认构造方法,可调用set、get赋值、取值
User user = (User) clazz.newInstance();
5、获取所有的构造方法:可使用构造函数赋值
Constructor<?> cons[] = clazz.getConstructors();
6、获取构造方法所需要的参数:
Class<?> clazzs[] = cons[i].getParameterTypes();
7、获取类的全部属性:
Field[] field = clazz.getDeclaredFields();
8、获取类属性的权限修饰符:
int mo = field[i].getModifiers();
String priv = Modifier.toString(mo);
9、获取类属性的类型:
Class<?> type = field[i].getType();
10、获取类的全部方法:
Method method[] = clazz.getMethods();
11、获取方法的返回值类型:
Class<?> returnType = method[i].getReturnType();
12、获取方法的参数类型:
Class<?> para[] = method[i].getParameterTypes();
13、获得构造方法声明的异常:
Class<?> exce[] = method[i].getExceptionTypes();

14、反射调用类的方法:
1、无参
Method method = clazz.getMethod("方法1");
method.invoke(clazz.newInstance());
2、有参
method = clazz.getMethod("方法2", int.class, String.class);可以使用自定义类型
method.invoke(clazz.newInstance(), 20, "张三");

15、反射调用类的属性:
Object obj = clazz.newInstance();
// 可以直接对 private 的属性赋值
Field field = clazz.getDeclaredField("proprety");
field.setAccessible(true);
field.set(obj, "修改属性");

备注:以上的调用当然也可以获取父类的

16、反射机制的动态代理:
定义一个InvocationHandler接口的子类,已完成代理的具体操作,实现以下方法。
public Object bind(Object obj) {
this.obj = obj;
//注意下面这句
return Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), this);
}

四:Android当中反射的使用
1、查找类Activity
2、修改调用源码中一些属性和方法
3、注解当中使用到的
4、xml查找Layout
五、java当中的实际使用
1、工厂模式的使用
2、修改集合中Integer泛型为String,或其他
3、

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,639评论 0 11
  • Jni数据类型 Jni方法 来自 http://blog.chinaunix.net/uid-22028680-i...
    FlyDragonInSky阅读 4,481评论 0 0
  • 1.在C/C++中实现本地方法 生成C/C++头文件之后,你就需要写头文件对应的本地方法。注意:所有的本地方法的第...
    JayQiu阅读 7,114评论 0 3
  • 1.反射机制是什么: 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,...
    蛮大人我们走阅读 2,817评论 0 0
  • 见到你 就象叶儿飘落水里 万千风流 都没了主宰 一颗痴心随你而去 汪洋大海 沉没是他 见到你 就象欣赏蒙娜....
    玢芬美藏阅读 1,144评论 0 2

友情链接更多精彩内容