反射j基本操作

获取class类对象的四种方式
public class InvocationMethod {
    public static void main(String[] args) throws ClassNotFoundException {
        //1.通过类获取
        Class<TargetObject> class1 = TargetObject.class;
        //2.通过实例获取
        Class<? extends TargetObject> class2 = new TargetObject().getClass();
        //3.通过类加载器获取
        Class<?> class3 = ClassLoader.getSystemClassLoader().loadClass("com.xwz.invacate.TargetObject");
        //4.通过Class获取
        Class<?> class4 = Class.forName("com.xwz.invacate.TargetObject");

        System.out.println(class1.getName());//        com.xwz.invacate.TargetObject
        System.out.println(class2.getName());//        com.xwz.invacate.TargetObject
        System.out.println(class3.getName());//        com.xwz.invacate.TargetObject
        System.out.println(class4.getName());//        com.xwz.invacate.TargetObject
    }
}








Java反射基本操作
//创建一个反射操作的类 TargetObject
public class TargetObject {
    private String name;
    public TargetObject() {//反射会用到无参
        this.name = "mary";
    }
    public void publicMethod(String string){
        System.out.println("这是一个public方法,这是你用反射传入的字符串 :"+string);
    }
    private void privateMethod(){
        System.out.println("这是一个private无参方法 : " + name);
    }
}



class Main{
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException, ClassNotFoundException {
        //1.获取TargetObject的class,并创建实例
        Class<?>  targetObjectClass= Class.forName("com.xwz.invacate.TargetObject");
        TargetObject targetObject = (TargetObject) targetObjectClass.newInstance();

        //2.获取类中的所有方法
        Method[] methods = targetObjectClass.getDeclaredMethods();
        for(Method method : methods){
            System.out.println(method.getName());
        }

        //3.获取指定方法并调用
        Method publicMethod = targetObjectClass.getDeclaredMethod("publicMethod", String.class);
        publicMethod.invoke(targetObject,"这是一个字符串参数");

        //4.获取字段并对字段进行修改
        Field name = targetObjectClass.getDeclaredField("name");
        name.setAccessible(true);
        name.set(targetObject,"jesse");

        //5.调用private方法
        Method privateMethod = targetObjectClass.getDeclaredMethod("privateMethod");
        privateMethod.setAccessible(true);
        privateMethod.invoke(targetObject);
    }
}
//privateMethod
//publicMethod
//这是一个public方法,这是你用反射传入的字符串 :这是一个字符串参数
//这是一个private无参方法 : jesse
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值