zoukankan      html  css  js  c++  java
  • 反射机制

    反射机制

    ps:
      Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。

    • 什么是Java的反射呢?

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

      反射机制常被用于不确定是什么类被加载的时候, 动态得操作类的属性和方法。比如:工具类的中需要获取类的属性和方法。

    • 自审: Java的反射机制可以获得类的基本结构

    Class类

    要正确使用Java反射机制就得使用java.lang.Class这个类。它是Java反射机制的起源。
    当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。

    功能
    —获取一个对象的类信息.

    1. —获取一个类的访问修饰符、成员、方法、构造方法以及父类的信息.

    2. —检获属于一个接口的常量和方法声明.

    3. —创建一个直到程序运行期间才知道名字的类的实例.

    • 优点:利用Java反射机制我们可以很灵活的对已经加载到Java虚拟机当中的类信息进行检测。
    • 缺点:当然这种检测在对运行的性能上会有些减弱,

    所以什么时候使用反射,就要靠业务的需求、大小,以及经验的积累来决定。

    反射
    获取class对象方式:

    1. 对象.getClass()
    2. Class.forName(类的全路径)
    3. 类名.class ,包装类.TYPE

    c) 通过反射访问属性

    1. 创建相对应的class类
    2. 创建person对象
    3. 获取指定的名称的属性
    4. 通过反射访问该属性时要取消权限查询
    5. 通过set进行赋值
    Class<?> class1 = Class.forName("com.oldcran.entity.Student");
    Student student = new Student();
    Field field = class1.getDeclaredField("age");
    // class1.getFields(), class1.getDeclaredFields();
    field.setAccessible(true);
    field.set(student, 18);
    

    d) 通过反射调用方法

    1. 实例化class对象
    2. 获取person类中名为sayhello的方法
    3. 调用该方法
    Person person = new Person();
    Method sayHello = class1.getMethod("sayHello", String.class)
    sayHello.invoke(person, "hello, old crab");
    

    利用反射进行构造方法:

    1. 获取class对象
    2. 获取构造器
    3. 创建实例
    Constructor<?> constructor = class1.getConstructor();
    Student stu = (Student)constructor.newInstance();
    
    Constructor<?> constructor1 = class1.getConstructor();
    Student stu = (Student)constructor1.newInstance("老螃蟹", 18);
    

    内省
    a) 概念:是java提供的一套API专门用于操作java对象的属性,比反射更加方便

    通过Introspector 获取 BeanInfo
    beaninfo获取propertyDescriptor
    然后再获取getter and setter
    b) 修改javabean属性

    创建person对象
    使用属性描述器获取person类name属性的描述信息
    获取name属性相对应的setter方法
    然后再调用方法修改值
    c) 读取bean属性

    Jsp标签访问javabean
    a) Jsp:useBean标签

    得知道id 实例的引用
    Scope 为page request session application
    b) Jsp:setPeoperty

    c) Jsp:getProperty

    beanUtils工具
    a) 概念:通过beanUtil范文javaBean的属性

  • 相关阅读:
    Java应用程序的运行机制,以及JDK,JRE,JVM
    正则表达式练习题
    正则表达式
    转:DOM操作
    jQuery 遍历
    转:把一个对象赋值给另一个对象会指向同一个内存地址
    sql 语句的先后执行顺序
    数据结构时间复杂度进阶篇
    数据结构时间复杂度基础篇
    UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现(转)
  • 原文地址:https://www.cnblogs.com/jwlxtf/p/7918414.html
Copyright © 2011-2022 走看看