码迷,mamicode.com
首页 > 其他好文 > 详细

反射reflect

时间:2017-10-20 13:38:05      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:com   构造   eth   构造器   method   person   目标   int   ext   

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

Class

众所周知Java有个Object 类,是所有Java 类的继承根源,其内声明了数个应该在所有Java 类中被改写的方法:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一个Class 对象。

Method method = getClass().getDeclaredMethod(action, HttpServletRequest.class,HttpServletResponse.class);

method.invoke(this, request,response);

 

1.理解Class类对象并实例化Class类对象

java.lang.Class是反射的源头

在Object类中定义了

 public final native Class<?> getClass();

会被所有子类继承,返回值是一个Class类,此类事java反射的源头。

技术分享

类加载器:把类装载进内存

jvm规范

1)启动类加载器

 2)用户自定义加载器

jvm运行时产生3个类加载器:

1)引导类加载器:java平台的核心库

2)扩展类加载器:负责jre/lib/ext目录下的jar包。。。

3)系统类加载器

 技术分享

 

技术分享

技术分享

java.lang.reflect.Method代表类的方法

java.lang.reflect.Field:代表类的成员变量

java.lang.reflect.Constructor:代表类的构造方法

 

2.运行时创建类对象并获取完整结构

有了Class对象,能做什么?

技术分享

技术分享

        //通过Class静态方法获取
        String className = "com.lamsey.Person";
        Class<?> class1 = Class.forName(className);
        System.out.println("class1:"+class1);
        
        //获得class后干啥?
        //创建类的对象:调用Class的newInstance方法
        /**
         * 需求:1)创建的类必须有一个无参的构造器
         *        2)类的构造器访问权限足够
         */
     //无参构造器创建对象
Person person = (Person) class1.newInstance(); System.out.println("person:"+person);

     //有参构造器创建对象 Constructor<?> constructor = class1.getDeclaredConstructor(String.class,int.class); System.out.println("constructor: "+constructor); Person object = (Person) constructor.newInstance("123",12); System.out.println(object);

 

 

 

3.通过反射调用类的指定方法、指定属性

技术分享

 

 技术分享

 

 

技术分享

 

 技术分享

4、动态代理

 

技术分享

 

 技术分享

在程序运行时根据动态创建目标类的代理对象

 

反射reflect

标签:com   构造   eth   构造器   method   person   目标   int   ext   

原文地址:http://www.cnblogs.com/limingxian537423/p/7055870.html

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