zoukankan      html  css  js  c++  java
  • 反射reflect

    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、动态代理

     

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

  • 相关阅读:
    Socket 编程,一个服务器,多个客户端,互相通信(分享) 转
    rundll32.exe命令使用大全 转
    SQL操作全集 转
    看似简单!解读C#程序员最易犯的7大错误 转载
    使用ZedGraph制作动态更新的统计图 转
    C# 递归算法!(n多举例) 转
    C# WinForm开发系列 DataGridView 转载
    用 System.Xml 读写XML 整理文档 转载
    C# WinForm下动态创建的DataGridView更换表头字段名 转
    C# listview.add
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/7055870.html
Copyright © 2011-2022 走看看