码迷,mamicode.com
首页 > 其他好文 > 详细

案例:通过反射获取方法并使用

时间:2021-02-15 11:39:12      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:mode   获取   指定   method   void   rri   对象创建   operator   学生   

案例:通过反射获取方法并使用

需求:通过反射获取类的setter方法,使用该方法为属性赋值

分析:

A. setter方法的方法名由set和属性名(首字母大写)组成:

 举例:setName,setAge

B. setter方法有且只有一个参数,参数类型为属性的类型:

 举例:setName(String name),setAge(int age)

C. setter方法为public 修饰的方法,反射获取该方法使用:

 getMethod(String,Class<?>...);

D. 根据上述分析分别为属性name、age赋值并使用

 package cn.itcast.demo32;
 ?
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 ?
 public class ReflectDemo01 {
     public static void main(String[] args) throws Exception {
         //需求:通过反射获取类的setter方法,使用该方法为属性赋值
         //1.通过反射获取Student类的字节码文件对象
         Class clazz = Class.forName("cn.itcast.demo32.Student");
         //2.通过反射获取Student类的构造方法,并创建该类的对象(调用成员方法势必要有对象)
         Constructor con = clazz.getConstructor();
         Student stu = (Student) con.newInstance();//学生对象创建完成
 ?
         //3.获取到指定的setName()方法,给Student对象设置值
         Method method1 = clazz.getMethod("setName", String.class);
         //调用此方法
         method1.invoke(stu,"豆豆");
 ?
 ?
         //4.打印学生对象
         System.out.println(stu);
 ?
    }
 }
 ?

 

 package cn.itcast.demo32;
 //标准的JavaBean类 学生类
 public class Student {
     //成员变量
     private String name;
 ?
     //空参构造
     public Student(){
 ?
    }
     //带参构造
     public Student(String name){
         this.name = name;
    }
     //getXxx和setXxx()方法
     public String getName(){
         return name;
 ?
    }
     public void setName(String name){
         this.name = name;
    }
     //toString()方法,用来打印该对象的各个属性值的
 ?
 ?
     @Override
     public String toString() {
         return "Student{" +
                 "name=‘" + name + ‘\‘‘ +
                 ‘}‘;
    }
 }
 ?

 

 

 

案例:通过反射获取方法并使用

标签:mode   获取   指定   method   void   rri   对象创建   operator   学生   

原文地址:https://www.cnblogs.com/doudoutj/p/14395489.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!