首页 > 其他分享 >反射-Class对象功能概述以及获取Field

反射-Class对象功能概述以及获取Field

时间:2022-08-25 17:48:12浏览次数:50  
标签:name 获取 Object Class Field 概述 public String

Class对象功能概述

1、获取成员变量们:

Field[] getFields():获取所有public修饰的成员变量

Field getField(String name):获取指定名称的 public修饰的成员变量

 

Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符

Field getDeclaredField(String name)

Field:成员变量

  操作:

  1、设置值

    void set(Object obj,Object value)

  2、获取值

    get(Object obj)

  3、忽略访问权限修饰符的安全检查

    setAccessible(true):暴力反射

 2、获取构造方法们:

Constructor<?>[] getConstructors()

Constructor<T> getConstructor(Class<?>... parameterTypes)

 

Constructor<?>[] getDeclaredConstructors()

Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)

Constructor构造方法

创建对象:

  T newInstance(Object... initargs)

  如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法

忽略访问权限修饰符的安全检查 setAccessible(true):暴力反射

3、获取成员方法们:

Method[] getMethods()

Method getMethod(String name, Class<?>... parameterTypes)

 

Method[] getDeclaredMethods()

Method getDeclaredMethod(String name, Class<?>... parameterTypes)

Method :方法对象:

  执行方法:

    Object invoke(Object obj,Object... args)

  获取方法名称:

    String getName:获取方法名

 4、获取类名:

 String getName()

 

Class对象功能-获取Field

 Field[] getFields() :获取所有public修饰的成员变量

 Field getField(String name):获取指定名称的public修饰的成员变量

 

 Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符

 ​Field getDeclaredField(String name):获取指定名称的修饰的成员变量,不考虑修饰符

操作:

  设置值:

​     void set(Object obj,Object value)

  获取值:

​     get(Object obj)

  忽略访问权限修饰符的安全检查:

​     setAccessible(true):暴力反射

public class Person {
    private String name;
    private int age;

    public String a;
    protected String b;
    String c;
    private String d;

    public Person() {
    }

    public Person(String name, int age, String a) {
        this.name = name;
        this.age = age;
        this.a = a;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", a='" + a + '\'' +
                ", b='" + b + '\'' +
                ", c='" + c + '\'' +
                ", d='" + d + '\'' +
                '}';
    }

    public String getD() {
        return d;
    }

    public void setD(String d) {
        this.d = d;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }
}
public class demo02 {
    public static void main(String[] args) throws Exception {
/*
1、获取成员变量们:
Field[] getFields():获取所有public修饰的成员变量
Field getField(String name):获取指定名称的 public修饰的成员变量
Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name)
Field:成员变量
  操作:
  1、设置值
    void set(Object obj,Object value)
  2、获取值
    get(Object obj)
  3、忽略访问权限修饰符的安全检查
    setAccessible(true):暴力反射
*/
        //0.获取Person的Class对象
        Class<Person> personClass = Person.class;
        //1.Field[] getFields():获取所有public修饰的成员变量
        Field[] fields = personClass.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }
        System.out.println("============");
        //2.Field getField(String name):获取指定名称的 public修饰的成员变量
        Field a = personClass.getDeclaredField("a");
        //创建对象
        Person p = new Person();
        //获取值
        Object value = a.get(p);
        //修改值
        a.set(p,"张三");
        System.out.println(p);
        System.out.println("=============");
        //3.Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符
        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField);
        }
        //4.Field getDeclaredField(String name):获取指定名称的 不考虑修饰符
        Field d = personClass.getDeclaredField("d");
        //忽略访问权限修饰符的安全检查
        d.setAccessible(true);
        Object value2 = d.get(p);
        d.set(p,"小强");
        System.out.println(p);
    }
}

运行结果:

 

标签:name,获取,Object,Class,Field,概述,public,String
From: https://www.cnblogs.com/qihaokuan/p/16624936.html

相关文章

  • Caused by: java.lang.UnsupportedClassVersionError: com/hfplm/handler/HFEBOMation
    Causedby:java.lang.UnsupportedClassVersionError:com/hfplm/handler/HFEBOMationHandlerhasbeencompiledbyamorerecentversionoftheJavaRuntime(classf......
  • ArrayList集合概述和基本使用和常用方法和遍历
    ArrayList集合概述和基本使用数组的长度不可以发生改变但是ArrayList集合的长度是可以随意变化的对于ArrayList来说,有一个尖括号<E>代表泛型泛型:也就是转正集合当中的......
  • C++学习笔记《面向对象概述》
    《面向对象概述》1.面向过程的结构化编程:把数据和动作分开放置,把数据放入到动作当中。采用自顶向下的方法构建程序,包含顺序,选择和循环三种结构。按照程序执行的时序步骤来......
  • IP组播概述
    使用组播承载点到多点业务组播(Multicast)是在一台源IP主机和多台(一组)IP主机之间进行,中间的网络设备根据接收者的需要,有选择性地对数据进行复制和分发组播方式下,单一的......
  • APL概述和使用步骤和Scanner概述及其API文档的使用
    APL概述和使用步骤 概述:API(ApplicationProgrammingInterface),应用程序编程接口。JavaAPl是一本程序员的字典,JDK中提供给我们使用的类的说明文档。这些类将底层的代......
  • 第十四章 垃圾回收概述
    孤独就是你的隧道阶段,你能不能把它挖通,你走过一次隧道之后,你以后面临着新的生活的黑暗区的时候,你心里就有一种力量去穿越它1.什么是垃圾垃圾是指在运行程序中没有任......
  • (一)MySQL概述
    一、概述SQL有两个重要的标准,分别是SQL92和SQL99,它们分别代表了92年和99年颁布的SQL标准。E-R(实体-关系)图它是我们用来描述现实世界的概念模型,在这个模型中有3个要素:实......
  • 案例分析&环境搭建、maven概述
    案例分析&环境搭建案例需求:1,提供index.html页面,页面中有一个省份下拉列表2.当页面加载完成后发送ajax请求,加载所有省份   maven概述maven是什么项目管理工具M......
  • DSA概述
    DSA:DataStructure+Algorithm课程清华大学邓俊辉数据结构与算法https://dsa.cs.tsinghua.edu.cn/~deng/ds/dsacpp/概论什么是计算评判DSA优劣的参照(直尺)度量DS......
  • 1040 [USACO 2014 Mar S]Watering the Fields 最小生成树
     链接:https://ac.nowcoder.com/acm/problem/24587来源:牛客网题目描述Duetoalackofrain,FarmerJohnwantstobuildanirrigations......