首页 > 代码库 > Java 学习 类的加载及反射

Java 学习 类的加载及反射

类加载机制与反射

    (一)类的加载,连接和初始化

      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;
    }

}
View Code
技术分享
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("小明");

    }

}
View Code

Java 学习 类的加载及反射