Java 反射和代理
来源:互联网 发布:代挂app源码 编辑:程序博客网 时间:2024/05/07 08:33
反射介绍
1. 要想使用反射,首先需要获得待处理类或对象所对应的Class对象。
2. 获取某个类或某个对象所对应的Class对象的常用的3种方式:
a) 使用Class类的静态方法forName:Class.forName(“java.lang.String”);
b) 使用类的.class语法:String.class;
c) 使用对象的getClass()方法:String s = “aa”; Class<?> clazz = s.getClass();
3. 若想通过类的不带参数的构造方法来生成对象,我们有两种方式:
a) 先获得Class对象,然后通过该Class对象的newInstance()方法直接生成即可:
Class<?> classType = String.class;
Object obj = classType.newInstance();
b) 先获得Class对象,然后通过该对象获得对应的Constructor对象,再通过该Constructor对象的newInstance()方法生成:
Class<?> classType = Customer.class;
Constructor cons = classType.getConstructor(new Class[]{});
Object obj = cons.newInstance(new Object[]{});
4. 若想通过类的带参数的构造方法生成对象,只能使用下面这一种方式:
Class<?> classType = Customer.class;
Constructor cons = classType.getConstructor(newClass[]{String.class, int.class});
Object obj = cons.newInstance(newObject[]{“hello”, 3});
5. Integer.TYPE返回的是int,而Integer.class返回的是Integer类所对应的Class对象。
Java类反射中的主要方法
在JDK(从jdk1.1开始)中,主要由以下类来实现java反射机制,这些类都是位于java.lang.reflect包中:
(1)Class类:代表一个类。
(2)Field类:代表类的成员变量(成员变量也称为类的属性)
(3)Method类:代表类的方法
(4)Constructor类:代表类的构造方法
(5)Array类:提供类动态创建数组,以及访问数组元素的静态方法
安全性和反射
Java编程语言定义一种多级别方法来处理反射的安全性。基本模式是对反射实施与应用于源代码接入相同的限制:
从任意位置到类公共组件的接入
类自身外部无任何到私有组件的接入
受保护和打包(缺省接入)组件的有限接入
我们可以在我们所写的类中,扩展一个普通的基本类java.lang.reflect.AccessibleObject 类。这个类定义了一种setAccessible方法,使我们能够启动或关闭对这些类中其中一个类的实例的接入检测.唯一的问题在于如果使用了安全性管理器,它将检测正在关闭接入检测的代码是否许可了这样做.如果未许可,安全性管理器抛出一个例外。
如:
对于访问修饰符为private的方法,直接调用method.invoke() 会报错
method.setAccessible(true);//压制java的访问控制检查
ClassType 类对象的方法
* getFields()与getDeclaredFields()区别:getFields()只能访问类中声明为公有的字段,私有的字段它无法访问.getDeclaredFields()能访问类中所有的字段,与public,private,protect无关
* getMethods()与getDeclaredMethods()区别:getMethods()只能访问类中声明为公有的方法,私有的方法它无法访问,能访问从其它类继承来的公有方法.getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法
* getConstructors()与getDeclaredConstructors()区别:getConstructors()只能访问类中声明为public的构造函数.getDeclaredConstructors()能访问类中所有的构造函数,与public,private,protect无关
- java 反射和代理
- JAVA 反射和代理
- Java 反射和代理
- Java反射和动态代理
- java 反射和代理机制
- java、反射和动态代理
- JAVA反射和代理机制
- java 反射和代理机制
- Java基础---反射和代理
- java反射和代理机制
- Java反射和动态代理
- Java反射和代理简介
- java反射和动态代理
- java的动态代理和反射
- java反射机制和动态代理
- java反射和静态代理模式
- JAVA的反射机制和动态代理
- Java反射机制和动态代理实例
- Fields、Fieldvalues和Fieldbyname的区别
- 自定义android手机的secret_code的广播发送(拨号盘输入触发);
- IIS7.0 检测到在集成的托管管道模式下不适用的ASP.NET设置 的解决方法
- iPhone开发之解决viewWillAppear不被调用
- 用IAR调试芯唐Cortex-M0系列芯片指南
- Java 反射和代理
- 为什么中国的程序员总被称为码农?
- Autodesk北京迁入绿色办公室。以及编程后台创建族,然后在模型文件中创建该族的实例
- android的触摸事件
- Ubuntu10.04 下安装低版本GCC方法
- iptable端口映射设置
- 你们有没有在一起:伤感日志
- error_reporting()详解
- 天津赛