• 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中对应属性值

  • 相关阅读:
    [机器学习]Fine Tune
    行人重识别综述
    OverFeat:基于卷积网络的集成识别、定位与检测
    HOG行人目标检测
    You Only Look Once Unified, Real-Time Object Detection(你只需要看一次统一的,实时的目标检测)
    目标检测:AlexNet
    目标检测Object Detection概述(Tensorflow&Pytorch实现)
    c++ 函数的默认参数
    C++空类
    C++中三种创建对象的方法【转】
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/13176722.html
Copyright © 2020-2023  润新知