反射事例代码

获取 Class 的方式有三种
类 obj=new 类;
//获取该对象所获取类的信息
Class class=Cat.class;

Class catcat.gteClass();

Class cat.forName(“包名+类名”);
public class bean {

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

private String name;

public bean() {
}

public bean(String name) {
    this.name = name;
}

private void getdata() {
    System.out.println("---------private");
}

}

import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class mymain {

public static void main(String[] args) {
    bean b = null;
    // 通过类获取类的信息
    Class myclass = bean.class;
    try {
        b = (bean) myclass.newInstance(); // bean 要有无参构造器否则会报错
    } catch (InstantiationException | IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // 传参的构造函数
    try {
        Constructor c = myclass.getConstructor(String.class);
        b = (bean) c.newInstance("Tom");
        System.out.println(b.getName());
    } catch (NoSuchMethodException | SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // 获取类的所有方法包括私有方法
    Method[] method = myclass.getDeclaredMethods();

    for (int i = 0; i < method.length; i++) {
        String name = method[i].getName();
        System.out.println(name);
    }

    // 获取属性值
    Field[] value = myclass.getDeclaredFields();
    for (int i = 0; i < value.length; i++) {
        System.out.println(value[i].getName());
    }
    value[0].setAccessible(true);
    String name;
    try {
        name = (String) value[0].get(b);
        System.out.println(name);
    } catch (IllegalArgumentException | IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // 反射调用其方法
    try {
        Method m = myclass.getDeclaredMethod("getdata");
        m.setAccessible(true);
        m.invoke(b);
    } catch (NoSuchMethodException | SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值