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的属性

  • 相关阅读:
    4 Apr 18 软件开发目录 logging模块的使用 序列化(Json, Pickle) os模块
    3 Apr 18 内置函数 列表生成式与生成器表达式 模块的使用之import 模块的使用之from…import…
    2 Apr 18 三元表达式 函数递归 匿名函数 内置函数
    30 Mar 18 迭代器 生成器 面向过程的编程
    29 Mar 18 函数 有参、无参装饰器
    28 Mar 18 函数
    27 Mar 18 函数的参数
    26 Mar 18 函数介绍
    23 Mar 18 文件处理
    22 Mar 18 补充数据类型+字符编码+文件处理
  • 原文地址:https://www.cnblogs.com/jwlxtf/p/7918414.html
Copyright © 2011-2022 走看看