码迷,mamicode.com
首页 > 编程语言 > 详细

Java Reflection

时间:2015-09-02 18:36:12      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

* Java Reflection

  Reflection 是被视为动态语言的关键,反射脊椎允许程序在执行期间借助于ReflectionAPI取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

* Java 反射机制提供的功能

  >在运行时判断任意一个对象所属的类。

  >在运行时构造任意一个类的对象。

  >在运行时判断任意一个类所具有的成员变量和方法。

  >在运行时调用任意一个对象的成员变量

  >生成动态代理

* 放射相关的API

  >java.lang.Class(类)

  >java.lang.reflect.Method(类的方法)

  >java.lang.reflect.Field(成员变量)

  >java.lang.reflect.Constructor(构造方法)

* code 

技术分享
//通过反射创建一个类的对象
        Class clazz = Person.class;
        Person person = (Person) clazz.newInstance();
        Field name =  clazz.getField("name");
        name.setAccessible(true);
        name.set(person, "Nyan_Shen");
        System.out.println(person.getName());
        Method show = clazz.getMethod("show");
        show.invoke(person);
        //有参数的方法,String.class为参数类型
        Method display = clazz.getMethod("display", String.class);
        display.invoke(person, "Nyan Shen");
reflection

 * Class(放射的源头)

  正常方式:引入包-->通过new实例化-->取得实例对象

  反射方式:实例化对象-->getClass方法-->得到完整的包类型

  创建一个类,通过编译(javac.exe)生成对应的class文件。然后使用java.exe加载(JVM的类加载器完成此.class文件)此.class 文件加载到内存以后,就是一个运行时类,存在缓存区。n那么这个类本身就是一个class的实例,一个运行时类只加载一次。

  

技术分享
@Test
    public void test003() throws Exception{
        //获取class类的三种方法
        //1、调用运行时类本身的class属性
        Class clazz1 = Person.class;
        System.out.println(clazz1.getName());
        //2、通过运行时类的对象
        Person person = new Person();
        Class clazz2 = person.getClass();
        System.out.println(clazz2.getName());
        //3、通过class的静态方法获取
        String className = "com.nyan.clazz.bean.Person";
        Class clazz3 = Class.forName(className);
        System.out.println(clazz3.getName());
        //4、通过类的加载器
        ClassLoader classLoader = this.getClass().getClassLoader();
        Class  clazz4 = classLoader.loadClass(className);
        System.out.println(clazz4.getName());
    }
getClass

 *  Java动态代理

  

Java Reflection

标签:

原文地址:http://www.cnblogs.com/Nyan-Workflow-FC/p/4776931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!