0
点赞
收藏
分享

微信扫一扫

Java网络爬虫实践:解析微信公众号页面的技巧

生命中最美的是成长 2024-03-07 阅读 7

何为反射

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

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

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


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

反射的简单应用

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);
    }
}

代码执行结果如下:

举报

相关推荐

0 条评论