获取成员变量并赋值使用

package com.shujia.day21;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

/*
    反射获取成员变量并赋值使用
    
    获取所有成员 通过类的字节码文件对象获取
		getFields           只能获取公共的成员变量
		getDeclaredFields   获取私有的成员变量
    获取单个成员
		getField,getDeclaredField   同上
    修改成员的值 修改私有的需要暴力访问f2.setAccessible(true);
		set(Object obj,Object value) 通过获取的成员变量修改,需要指定是哪个类的
		将指定对象变量上此 Field 对象表示的字段设置为指定的新值。

 */
public class FieldDemo1 {
    public static void main(String[] args) throws Exception {
        //先通过反射将对象创建出来
        //创建类的字节码文件对象
        Class<?> studentClass = Class.forName("com.shujia.day21.Student");
        //通过类的字节码文件对象获取类的构造方法
        Constructor<?> c1 = studentClass.getConstructor();
        //通过获取的构造方法创建类的对象,创建这个对象的目的是访问成员的,被访问的成员变量是一个独立的个体,使用时需要指定哪一个类
        Object o = c1.newInstance(); 

        //反射获取成员变量
        //getField 只能获取公共的成员变量
        Field f1 = studentClass.getField("phoneNum");
        System.out.println(f1);
//        Field f2 = studentClass.getField("name");
//        System.out.println(f2);
        //获取私有的成员变量
        Field f2 = studentClass.getDeclaredField("name");
        System.out.println(f2);

        //如何使用反射获取的成员变量呢?
        f1.setInt(o,110);
        System.out.println("------------------------------------------");
        System.out.println(o);
        System.out.println("------------------------------------------");
        f2.setAccessible(true);
        f2.set(o,"魏一民");
        System.out.println(o);



    }
}

package com.shujia.day21;

public class Student {
    private String name;
    int age;
    protected String address;
    public int phoneNum;

    public Student() {

    }

    public Student(String s) {
        System.out.println("带参数的公共构造方法" + s);
    }

    protected Student(int i) {
        System.out.println("带参数的受保护构造方法" + i);
    }

    Student(double d) {
        System.out.println("带参数的默认修饰符构造方法" + d);
    }

    private Student(String name, int age) {
        System.out.println("带参数的私有构造方法" + name + "," + age);
    }

    public void fun1() {
        System.out.println("这是公共的成员方法");
    }

    public String fun1(String s) {
        System.out.println("这是公共的成员方法" + s);
        return "数加:" + s;
    }

    protected void fun2(){
        System.out.println("这是受保护的成员方法");
    }

    void fun3(){
        System.out.println("这是默认的成员方法");
    }

    private void fun4(){
        System.out.println("这是私有的成员方法");
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", phoneNum=" + phoneNum +
                '}';
    }
}
posted @ 2024-08-23 21:30  ていせい  阅读(2)  评论(0编辑  收藏  举报