反射_Class对象功能概述-反射_Class对象功能_获取Field

反射_Class对象功能概述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
* Class对象功能:
    * 获取功能:
        1. 获取成员变量们
            * Field[] getFields() :获取所有public修饰的成员变量
            * Field getField(String name)   获取指定名称的 public修饰的成员变量
  
            * Field[] getDeclaredFields()  获取所有的成员变量,不考虑修饰符
            * Field getDeclaredField(String name) 
        2. 获取构造方法们
            * Constructor<?>[] getConstructors() 
            * Constructor<T> getConstructor(类<?>... parameterTypes) 
  
            * Constructor<T> getDeclaredConstructor(类<?>... parameterTypes) 
            * Constructor<?>[] getDeclaredConstructors() 
        3. 获取成员方法们:
            * Method[] getMethods() 
            * Method getMethod(String name, 类<?>... parameterTypes) 
  
            * Method[] getDeclaredMethods() 
            * Method getDeclaredMethod(String name, 类<?>... parameterTypes) 
  
        4. 获取全类名   
            * String getName()

  

Person类:

复制代码
public class Person {
    private String name;
    private int age;
    public String a;
 
    public Person() {
    }
 
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    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;
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", a='" + a + '\'' +
                '}';
    public void eat() {
        System.out.println("eat...");
    }
 
    public void eat(String food) {
        System.out.println("eat..." + food);
        }
    }
复制代码

 

反射_Class对象功能_获取Field

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):暴力反射

复制代码
import domain.Person;
import java.lang.reflect.Field;
 
 
public class ReflectDemo2 {
    public static void main(String[] args) throws Exception {
 
        //0、获取Person的Class对象
        Class personClass = Person.class;
 
        //1、Field[] getFields()
        Field[] fields = personClass.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }
 
        System.out.println("--------");
        //Field getField(String name)
        Field a = personClass.getField("a");
        //获取成员变量a的值
        Person p = new Person();
        Object value = a.get(p);
        System.out.println(value);
        //设置a的值
        a.set(p,"张三");
        System.out.println(p);
 
        System.out.println("##################");
 
        //Field[] getDeclaredFields(),获取所有的成员变量,不考虑修饰符
        Field[] declaredFields = personClass.getDeclaredFields();
        for(Field decl : declaredFields){
            System.out.println(decl);
        }
        //Field getDeclaredField(String name)
        Field d = personClass.getDeclaredField("age");
        //忽略访问权限修饰符的安全检查
        d.setAccessible(true);//暴力反射
        Object value2 = d.get(p);
        System.out.println(value2);
    }
}
复制代码

 

运行结果:

 

 

 

posted @   ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示