Educoder--9.2 Java反射进阶

第1关:反射获取并调用类中方法

任务描述

本关任务:打印输出通过反射修改后的Student对象

1.反射获取Student类中的name和school属性,将实例化的student对象的名字设置为李四,school设置为清华大学

相关知识

1.student类的属性定义如下:

 
  1. public class Student {
  2. public String name;
  3. int age;
  4. private String school;
  5. }

2.反射获取类中的属性

要获取当前类中定义的所有属性可以通过 Class 中的 getDeclaredFields 函数,它会获取到当前类中的 public、default、protected、private 的所有属性。而 getDeclaredField 则是获取某个指定的属性。代码示例如下 :

 
  1. private static void showDeclaredFields() {
  2. Student student = new Student("mr.simple");
  3. try {
  4. // 获取当前类和父类的某个公有属性
  5. Field gradeField = student.getClass().getDeclaredField("mGrade");
  6. // 获取属性值并打印
  7. System.out.println(" my grade is : " + gradeField.getInt(student));
  8. // 设置属性值
  9. gradeField.set(student, 10);
  10. System.out.println(" my grade is : " + gradeField.getInt(student));
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. }

编程要求

根据提示,在右侧编辑器补充代码,完成以下任务:

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类的属性定义如下:

 
  1. public class Student {
  2. public String name;
  3. int age;
  4. private String school;
  5. }

2.反射获取类中的属性

要获取当前类中定义的所有属性可以通过 Class 中的 getDeclaredFields 函数,它会获取到当前类中的 public、default、protected、private 的所有属性。而 getDeclaredField 则是获取某个指定的属性。代码示例如下 :

 
  1. private static void showDeclaredFields() {
  2. Student student = new Student("mr.simple");
  3. try {
  4. // 获取当前类和父类的某个公有属性
  5. Field gradeField = student.getClass().getDeclaredField("mGrade");
  6. // 获取属性值并打印
  7. System.out.println(" my grade is : " + gradeField.getInt(student));
  8. // 设置属性值
  9. gradeField.set(student, 10);
  10. System.out.println(" my grade is : " + gradeField.getInt(student));
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. }

编程要求

根据提示,在右侧编辑器补充代码,完成以下任务:

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关:知识回顾 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值