• Java反射机制


    反射就是把Java类中的各个部分,映射成一个个的Java对象,拿到这些对象后可以做一些事情。

    一. 反射机制相关类

    (1)java.lang.Class<T>
    参数类型 T - 由此类对象建模的类的类型。 例如, String.class的类型是Class<String> 。 如果正在建模的类是未知的,请使用Class<?> 。

    1. static Class<?> forName(String className); //返回指定类或接口的字节码对象。
    2. T newInstance(); //创建字节码对象表示的类的实例。

     Class<?> classBook = Class.forName("com.android.Book");
     Book book = (Book)classBook.newInstance();

    3. String getName(); //返回类的完整路径名 。
    4. String getSimpleName();//返回类名
    5. Class<? super T> getSuperclass(); //返回当前类继承的父类的名字
    6. Class<?>[] getInterfaces(); //返回当前类实现的类或是接口
    -----------------------------------------------------------------------------
    7. Field getField(String name) ;//返回指定的公有的属性对象
    8. Field getDeclaredField(String name);//返回指定的属性对象

    Class<?> bookClass = Class.forName("com.android.Book");
    Field tagField = bookClass.getDeclaredField("TAG");//反射私有属性,包括静态属性。
    tagField.setAccessible(true);
    Object bookObject = classBook.newInstance();
    String tag = (String) fieldTag.get(bookObject);

    -----------------------------------------------------------------------------
    9. Constructor<T> getConstructor(Class...<?> parameterTypes);// 返回该类中与参数类型匹配的公有构造方法
    10. Constructor<T> getDeclaredConstructor(类<?>... parameterTypes) //返回该类中与参数类型匹配的构造方法


    (2) java.lang.reflect.Constructor<T>
    Constructor代表类的构造方法。
    T newInstance(Object... initargs);//根据传递的参数创建类的对象

    Class<?> bookClass = Class.forName("com.android.Book");
    Constructor<?> declaredConstructor = bookClass.getDeclaredConstructor(String.class,String.class);
    declaredConstructor.setAccessible(true);
    Book book = (Book)declaredConstructor.newInstance("Android开发","任玉刚");


    (3)java.lang.reflect.Method
    Method代表类的方法
    Object invoke(Object obj, Object... args);//传递object对象和参数,调用该对象对应的方法。

    Class<?> bookClass = Class.forName("com.android.Book");
    Method bookMethod = bookClass.getDeclaredMethod("declaredMethod",int.class);
    bookMethod.setAccessible(true);
    Object bookObject = bookClass.newInstance();
    String str = (String)bookMethod.invoke(bookObject,0);

    (4)java.lang.reflect.Field
    Field代表类的成员变量
    boolean equals(Object obj);//将此Field与指定对象进行比较。
    Object get(Object obj); //获得obj中对应的属性值
    void set(Object obj,Object value);//设置obj中对应属性值

  • 相关阅读:
    深度学习时代的图模型,清华发文综述图网络
    深入解析CNN pooling 池化层原理及其作用
    如何理解线性回归中的“回归”,回归到哪里?
    线性回归中“回归”的含义
    深度学习基础——Epoch、Iteration、Batchsize
    手动清空微信PC客户端数据
    Mini-batch 和batch的区别
    Python中绘制场景热力图
    HSV颜色识别-HSV基本颜色分量范围
    Android拨打接听电话自动免提
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/13176722.html
Copyright © 2020-2023  润新知