关于反射~

何为反射

        在 Java 中,反射是指在运行时检查和操作类、接口、字段、方法等程序结构的能力。通过反射,可以在运行时获取类的信息,创建类的实例,调用类的方法,访问和修改类的字段等。

        我们知道在类中如果有私有属性的情况下,类外是无法访问到的,但反射能直接操作类私有属性。反射可以在运行时获取一个类的所有信息,(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分。

        反射我将其理解为将一个整体的类中成员变量 、方法等都解剖成一个一个的java对象


反射就是把java类中的各种成分映射成一个个的Java对象
例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。(其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述)
如图是类的正常加载过程:反射的原理在与class对象。
熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象


原文链接:Java基础之—反射(非常重要)-CSDN博客

反射的简单应用

public class User {
    //私有属性
    private int age = 18;
    //公告属性
    public String name = "zhangsan";

    public void publicMethod(){
        System.out.println("do public method");
    }

    private void privateMethod(){
        System.out.println("do private method");
    }

    public static void staticMethod(){
        System.out.println("do static method");
    }

    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {
        //1.反射 得到  对象
        Class<?> clazz = Class.forName("User");
        //2.得到方法
        Method publicMethod = clazz.getDeclaredMethod("publicMethod");
        //3.执行普通方法
        publicMethod.invoke(clazz.getDeclaredConstructor().newInstance());

        // 私有方法
        Method privateMethod = clazz.getDeclaredMethod("privateMethod");
        privateMethod.invoke(clazz.getDeclaredConstructor().newInstance());

        //静态方法
        Method staticMethod = clazz.getDeclaredMethod("staticMethod");
        staticMethod.invoke(clazz.getDeclaredConstructor().newInstance());

        //公共属性
        Field field = clazz.getDeclaredField("name");
        String name = (String) field.get(clazz.getDeclaredConstructor().newInstance());
        System.out.println("name : " + name);

        //私有属性
        Field privateField = clazz.getDeclaredField("age");
        int age = (int) privateField.get(clazz.getDeclaredConstructor().newInstance());
        System.out.println("age : " + age);
    }
}

代码执行结果如下:

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值