A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kingmask 中级黑马   /  2016-4-27 00:05  /  304 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

.反射操作
字段:getField(String name )直接获取名称
使用 get(Object obj)获取值
使用 set(Object obj,Value)设置值时需要对象也需要传入值
方法:getMethod(String name, Class ... clazz 参数类型)方法既需要方法名称也需要方法类型
使用invoke(Objectobj,Value...)需要对象,而且要传入参数值才能调用方法
构造函数:getConstructor(Class... clazz) 构造方法不需要对象,只需要参数类型列表就能确定构造函数
使用newInstance(Object... obj)实例化一个对象
package com.itheima;
importjava.lang.reflect.Constructor;
importjava.lang.reflect.Field;
importjava.lang.reflect.Method;
public class 反射操作 {
    public static void main(String[] args){
        Class clazz= Teacher2.class;
        try {
            Constructor con=clazz.getConstructor(String.class);
            Teacher2te=(Teacher2)con.newInstance("Hei");
            Fieldfield=clazz.getDeclaredField("name");
            field.setAccessible(true);
            String name=(String)field.get(te);
            
            System.out.println("原来的值:"+te);
            field.set(te, "123");
            System.out.println("更改后的值:"+te);
            Method method=clazz.getMethod("print", String.class);
            method.invoke(te, "345");
            
            
        } catch (Exception e) {
            // TODO Auto-generated catchblock
            e.printStackTrace();
        }
    }
}
class Teacher2{
    private String name;
    public Teacher2(String name) {
        super();
        this.name = name;
    }
    public void print(String str){
        System.out.println("教师名称:"+name+"\r\n 输入值:"+str);
    }
    @Override
    public String toString() {
        return "Teacher2[name=" + name + "]";
    }
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马