java反射
之前的博客java反射讲了有关java反射的基础知识:什么是java发射,如何获取Class对象,如何获取到Class对象的属性、方法和构造方法等。
今天的博客主要有关如何操作属性、方法、构造方法
我们直接进入主题:要想操作一个类的属性,我们能想到的就是你得获得这个属性,那么前提是你获得了这个Class对象,不然一切都是空谈,现在我们先获得这个Class对象。(三种方法的任意一种)下面我先给出我们要操作的类。
public class Person{
public String name;
private int age;
//我给里面写了一个输出的方法,一会方便我们操作的时候来输出
public void print(){
System.out.println("name:"+name+"age:"+age);
}
}
先来获取类的Class对象吧
//我们获取了Person类的类对象clazz
Class clazz= class.forName(reflect.Person);
接下来就可以获取到属性,然后操作属性(注意我们要操作属性、方法等我们都需要先创建出这个对象)
//使用Person类对象clazz的无参构造方法来创建了一个对象。
Person per = (Person)clazz.getnewInstance();
Field f = clazz.getField("name");//获取到属性name
int ff = f.getModifiers();//这个方法是获得属性的特征修饰,这个方法的返回值是int类型的,这里随意的加了一个拓展,大家可以忽略。
//操作属性 向里面存值
//set(对象,值)————从这个属性的set方法,我们可以知道,他套操作属性,我们需要知道属性要操作的Class类对象是谁,现在也就解释了之前 我们要调用getnewInstance方法来创建Person对象的原因(其实创建对象的原因不止这些,但是这里也能反映一些)
f.set(per,"小白");
per.print();//调用了peeson的print方法输出和属性的值,输出结果在下面啊
//操作属性 从里面取值
//get(对象)
f.get(per);
输出:

如上是利用反射怎么操作属性的,不论属性是共有还是私有的,我们通过反射都可以获取到,但是如果属性是私有的,我们不可以直接操作,而是要通过设置,但是这个方法通常是不推荐使用的,不安全
Field fa = clazz.getDeclaredField("age");//获取到私有属性age
//不能直接操作,我们要通过设置
fa.setAccessible(true);
fa.set(per,18);

本文继续探讨Java反射,重点讲解如何操作类的属性。首先,需获取Class对象,然后才能进行属性操作。无论是公共属性还是私有属性,反射都能获取,但私有属性的直接操作需通过设置方法,这种方式通常不安全。
——属性的操作&spm=1001.2101.3001.5002&articleId=103333531&d=1&t=3&u=4b02370c7a144726abb6aa10b6ef6d7d)
1789

被折叠的 条评论
为什么被折叠?



