标签:open tde 类型 对象 oca alt 成员变量 结束 缓存
类加载机制与反射
(一)类的加载,连接和初始化
1,一个main函数相当于调用一个jvm进程,main函数结束其内存数据清除
2,类加载(类初始化)三个步骤:
1:类的加载:
2,类的连接:
3,类的初始化:
(二)类加载器
1,Bootstrap ClassLoader:根类加载器(非ClassLoder子类,jvm提供)
2,Extension ClassLoader:扩展类加载器 负责加载JRE中的类
3,System ClassLoader:系统类加载器 ClassPath环境变量指定的JAR包和类路径
4,用户自定义类(自底向上优先)
5,类加载机制:先缓存找,再父类找,最后全盘找
(三),通过反射查类信息和操控对象
1,查看类信息:通过Class clazz=类名.class;然后调用clazz来查看类信息
2,通过反射机制创建对象方法
3,获取类中成员变量,同生产的对象。getDeclazredField(object)获取成员变量 ,返回Field类型,再通过Field.set/get方法改变值
(四),使用反射生产JDK动态代理
1,使用Proxy和InvocationHandler创建动态代理
Java测试代码:(处理事件在invork上)
package classLoader; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class MyInvokationHandler implements InvocationHandler { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub System.out.println("----runing Methond"+method); if(args!=null){ System.out.println("下面执行该方法时传入的实参:"); for(Object val:args){ System.out.println(val); } } else{ System.out.println("调用方法没有实参"); } return null; } }
package classLoader; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class ProxyTest { public interface Person {//内部接口 void work(); void sayHello(String name); } public static void main(String[] args) { // TODO Auto-generated method stub InvocationHandler handler=new MyInvokationHandler(); Person p=(Person) Proxy.newProxyInstance(Person.class.getClassLoader(), new Class[]{Person.class}, handler); p.work(); p.sayHello("小明"); } }
标签:open tde 类型 对象 oca alt 成员变量 结束 缓存
原文地址:http://www.cnblogs.com/ksWorld/p/6775202.html