Java基础知识总结(35)

admin2024-04-03  0

获取成员变量
  • Field getField(String name):返回此Class对象对应类的指定public Field。

  • Field[]getFields():返回此Class对象对应类的所有public Field。

public class Person {
​
    public int publicPerson1;
    protected int protectedPerson2;
    int defaultPerson3;
    private int privatePerson4;
​
    public static int age = 18;
    public void publicPerson1(){};
    protected  void protectPerson2(){};
    void defaultPerson3(){};
    private void privatePerson4(){};
​
    public static void test(){
​
    }
}
​
public class Student extends Person {
    public  int publicStudent1;
    protected int protectedStudent2;
    int defaultStudent3;
    private int privateStudent4;
​
    public void publicStudent1(){};
    protected  void protectStudent2(){};
    void defaultStudent3(){};
    private void privateStudent4(String name){
        System.out.println(name);
    }
    public static void test(){
​
    }
​
    @Override
    public String toString() {
        return "Student{" +
                "publicStudent1=" + publicStudent1 +
                ", protectedStudent2=" + protectedStudent2 +
                ", defaultStudent3=" + defaultStudent3 +
                ", privateStudent4=" + privateStudent4 +
                '}';
    }
}
​
/**
 *getField()方法练习
 */
public class GetFieldDemo {
    public static void main(String[] args) throws NoSuchFieldException {
        //获取Student类的Class对象
        Class clazz = Student.class;
        //获取自身声明的包括从父类继承的public修饰的成员变量
        Field[] fields = clazz.getFields();
        //获取自身声明的包括从父类继承的指定了名称的成员变量
        Field field = clazz.getField("publicStudent1");
        System.out.println(field);
    }
}
  • Field getDeclaredField(String name):返回此Class对象对应类的指定Field,与Field的访问权限无关。

  • Field[] getDeclaredFields():返回此Class对象对应类的全部 Field,与Field的访问权限无关。

/**
 * getDeclaredDemo()方法练习
 */
public class GetDeclaredFieldDemo {
    public static void main(String[] args) throws NoSuchFieldException {
        //获取Student类的Class对象
        Class clazz = Student.class;
        //获取自身声明的成员变量,与访问修饰符无关
        Field[] fields = clazz.getDeclaredFields();
        Field field = clazz.getDeclaredField("privateStudent4");
        System.out.println(field);
    }
}
成员变量赋值和取值
/**
 * 通过反射访问成员变量
 */
public class VisitField {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
​
        Class clazz = Student.class;
        Student student = new Student();
        //获取成员变量
        Field field = clazz.getDeclaredField("privateStudent4");
        //屏蔽访问检查,使得外部程序能够访问private修饰的成员变量
        field.setAccessible(true);
        //修改变量的值
        field.set(student,20);
        //获取变量的值
        int i = field.getInt(student);
        System.out.println(i);
        System.out.println(student);
​
    }
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!