ageField.setInt(person, 20);什么意思
时间: 2024-05-26 22:12:19 浏览: 11
这行代码是使用Java反射机制给一个名为"person"的对象的"ageField"属性赋值为20。其中"ageField"是一个字段对象,可以通过类的反射获取,而"person"则是该字段所在对象的实例。这行代码的含义是将"person"对象的"ageField"属性设置为20,类似于直接调用"person.setAgeField(20)"的效果。值得注意的是,如果"ageField"的访问权限为私有(private),需要先调用"ageField.setAccessible(true)"开启访问权限。
相关问题
java1. 定义一个Person类,包含属性name、age。 2. 使用反射的方式创建一个实例、调用构造函数初始化name、age。使用反射方式调用setName方法对姓名进行设置,不使用setAge方法直接使用反射方式对age赋值。
代码如下:
```java
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public static void main(String[] args) throws Exception {
Class<Person> clazz = Person.class;
Constructor<Person> constructor = clazz.getConstructor();
Person person = constructor.newInstance();
Field nameField = clazz.getDeclaredField("name");
nameField.setAccessible(true);
nameField.set(person, "小明");
Field ageField = clazz.getDeclaredField("age");
ageField.setAccessible(true);
ageField.setInt(person, 18);
System.out.println(person.getName() + " " + person.getAge());
}
}
```
解释一下代码:
首先我们定义了一个Person类,包含了name和age两个属性,以及相应的构造函数和setter/getter方法。
然后在main方法中,我们使用反射的方式获取Person类的构造函数,创建一个实例。
接着我们使用反射的方式获取name和age两个属性,并将它们设为可访问的。
最后,我们使用反射的方式设置name和age两个属性的值,然后输出结果即可。
需要注意的是,对于int类型的属性,我们不能直接使用set方法来设置属性值,而应该使用setInt方法。
java反射filed类 set方法
Java反射中,Field类的set方法用于设置指定对象中的指定字段的值。该方法需要两个参数:第一个参数是要设置值的对象,第二个参数是要设置的值。例如:
```
public class Person {
private String name;
private int age;
// 省略getter和setter方法
}
public static void main(String[] args) throws Exception {
Person person = new Person();
Field nameField = person.getClass().getDeclaredField("name");
nameField.setAccessible(true); // 设置为可访问
nameField.set(person, "张三"); // 设置name字段的值为"张三"
Field ageField = person.getClass().getDeclaredField("age");
ageField.setAccessible(true); // 设置为可访问
ageField.set(person, 18); // 设置age字段的值为18
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)