zoukankan      html  css  js  c++  java
  • 反射常见方法

    反射概念:旨在运行的状态中,动态获取信息及动态调用对象方法的功能
    3个动态性质:
    运行时生成对象的实例
    运行期间调用方法
    运行时更改属性

    Classs继承Object
    反射常用的类:
    Class类:反射的核心,反射所有的操作都是围绕该类来生成的。通过Class类获取类的属性,方法等内容;
    Filed类:表示类的属性,可获取和设置类中的属性的值
    Method类:表示类的方法,用来获取类中方法的信息,或者执行方法;
    Constructor类:表示类的构造方法;

    1获取类的信息
    第一步获取Class的对象
    a  调用getClass()方法
    Student p=new Student();
     Class cla=p.getClass();不用知道类是什么,知道某个类的对象就可以返回该对象对应类的对象
    可以不知道Student类的存在,知道去对象p就可以获取Student类对应的Class对象

    b 调用class属性
    Class cla=Student.class;
    这种需要在编译期间就要知道类的名称

    c 使用Class类的forName()静态方法:
    这种需要在编译期间就要知道类的名称
    括号内必须传入字符串,它必须是某个类的全名,类名前要添加完整的包名:
    Class cla=Class.for("com.pb.jadv.reflection.Student");


    每个类都有一个Class描述
    创建对象
    >>>>>使用Class对象的newInstance()创建对象   前提是类有默认的构造方法
    Class cla=Love.class;
    Love  loeo;
    loeo = (Love) cla.newInstance();
    System.out.println(loeo.toString());

    >>>>>使用Constructor对象创建对象   指定默认的构造方法
    Class cla=Love.class;
    Constructor cu = cla.getConstructor(String.class, int.class);
    Love lolo = (Love) cu.newInstance("小王", 26);
    System.out.println(lolo.toString());

    方法:
    访问不包含属性的方法
    方法一
    1 .Method getMethod(Stingsname,Class[][arams)//访问指定类型的方法
    2.Method[]  getMethods()//返回public 的Method数组

    3.Method getDeclaredMethod(Stingsname,Class[][arams)//访问所有的方法中指定类型的方法,与属性级别无关
    4Method[]  getDeclaredMethods()//返回所有Method数组


    访问包含属性的public
    方法二
    1.Filed getFiled(String name)//访问包含属性指定类型的public方法
    2.Filed[] getFileds()//:》》》返回数组

    3.Filed getDeclaredFiled(String name)//访问所有方法中指定属性类型的方法与属性级别无关
    4.Filed[] getDeclaredFileds()//所有方法:》》》返回数组
    访问类的属性Filed
    通过 Xxx getXxx(Object obj)获取对象属性对应的(8基本数据类型)的属性值
    Object get(Object obj) 获得对象的属性为引用类型属性值
    void setXxx(Object obj,Xxx val) 把对象属性对应的的值设置为(8中)基本数据类型属性值
    void set(Object obj,Xxx val) //把对象的属性设置为Val ,针对引用类型
    void setAccessible(bool flg)对获取到的属性设置访问权限,true,可以对私有属性取值和赋值

    一点点学习,一丝丝进步。不懈怠,才不会被时代淘汰
  • 相关阅读:
    算法学习:二分法从入门到精通
    TypeScript筑基笔记一:Visual Studio Code 创建Typescript文件和实时监控
    LeetCode 92. 反转链表 II
    LeetCode 1525. 字符串的好分割数目
    字节跳动-people后台一面面经
    LeetCode 117. 填充每个节点的下一个右侧节点指针 II
    LeetCode 1529. 灯泡开关 IV
    LeetCode 165. 比较版本号
    LeetCode 312. 戳气球
    LeetCode 605. 种花问题
  • 原文地址:https://www.cnblogs.com/wangbiaohistory/p/10016524.html
Copyright © 2011-2022 走看看