第1关:反射获取并调用类中方法
任务描述
本关任务:打印输出通过反射修改后的Student对象
1.反射获取Student类中的name和school属性,将实例化的student对象的名字设置为李四,school设置为清华大学
相关知识
1.student类的属性定义如下:
public class Student {
public String name;
int age;
private String school;
}
2.反射获取类中的属性
要获取当前类中定义的所有属性可以通过 Class 中的 getDeclaredFields 函数,它会获取到当前类中的 public、default、protected、private 的所有属性。而 getDeclaredField 则是获取某个指定的属性。代码示例如下 :
private static void showDeclaredFields() {
Student student = new Student("mr.simple");
try {
// 获取当前类和父类的某个公有属性
Field gradeField = student.getClass().getDeclaredField("mGrade");
// 获取属性值并打印
System.out.println(" my grade is : " + gradeField.getInt(student));
// 设置属性值
gradeField.set(student, 10);
System.out.println(" my grade is : " + gradeField.getInt(student));
} catch (Exception e) {
e.printStackTrace();
}
}
编程要求
根据提示,在右侧编辑器补充代码,完成以下任务:
1.反射获取Student类中的name和school属性,将实例化的student对象的名字设置为李四,school设置为清华大学
测试说明
平台会对你编写的代码进行测试:
无输入,系统自动判断代码的对错。
开始你的任务吧,祝你成功!
package step1;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectionFuncInvo {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException,IllegalAccessException {
Student student = null;
// ---------------------Begin------------------------
//反射获取Student类中的setAge方法,将实例化的student对象的年龄设置为30
student = new Student();
Class<? extends Student> studentClass = student.getClass();
Method setAge = studentClass.getMethod("setAge",int.class);
setAge.invoke(student,30);
// ---------------------End------------------------
System.out.println(student);
}
}
第2关:反射获取并修改类中定义的属性
任务描述
本关任务:打印输出通过反射修改后的Student对象
1.反射获取Student类中的name和school属性,将实例化的student对象的名字设置为李四,school设置为清华大学
相关知识
1.student类的属性定义如下:
public class Student {
public String name;
int age;
private String school;
}
2.反射获取类中的属性
要获取当前类中定义的所有属性可以通过 Class 中的 getDeclaredFields 函数,它会获取到当前类中的 public、default、protected、private 的所有属性。而 getDeclaredField 则是获取某个指定的属性。代码示例如下 :
private static void showDeclaredFields() {
Student student = new Student("mr.simple");
try {
// 获取当前类和父类的某个公有属性
Field gradeField = student.getClass().getDeclaredField("mGrade");
// 获取属性值并打印
System.out.println(" my grade is : " + gradeField.getInt(student));
// 设置属性值
gradeField.set(student, 10);
System.out.println(" my grade is : " + gradeField.getInt(student));
} catch (Exception e) {
e.printStackTrace();
}
}
编程要求
根据提示,在右侧编辑器补充代码,完成以下任务:
1.反射获取Student类中的name和school属性,将实例化的student对象的名字设置为李四,school设置为清华大学
测试说明
平台会对你编写的代码进行测试:
无输入,系统自动判断代码的对错。
开始你的任务吧,祝你成功!
package step2;
import java.lang.reflect.Field;
public class ReflectFieldEdit {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException{
Student student = null;
// ---------------------Begin------------------------
student = new Student();
Class<? extends Student> studentClass = student.getClass();
Field school_name = studentClass.getDeclaredField("school");
school_name.setAccessible(true);
Field name = studentClass.getDeclaredField("name");
name.set(student,"李四");
school_name.set(student,"清华大学");
// ---------------------End------------------------
String s = student.toString();
int n = s.length();
System.out.println(s.substring(0,n-1));
}
}
第3关:知识回顾