Constructor、Method、Field

Constructor

Constructor表示类的构造函数,有一个原生的public方法:

    public T newInstance(Object ... initargs)
        throws InstantiationException, IllegalAccessException,
               IllegalArgumentException, InvocationTargetException
    {
        if (serializationClass == null) {
            return newInstance0(initargs);
        } else {
            return (T) newInstanceFromSerialization(serializationCtor, serializationClass);
        }
    }

该方法使用参数initargs创建一个所属类的实例。
如果所属的类是一个非静态内部类,那么该函数的第一个参数必须是外部类的实例。


Method

表示一个类的方法。

原生的public方法如下:

    public boolean isBridge() {
        return super.isBridgeMethodInternal();
    }
    /*1、若是静态方法,则obj为null。
      2、若是静态方法,并且所属的类没有初始化,则调用invoke会初始化该类。
    */
    public native Object invoke(Object obj, Object... args)
            throws IllegalAccessException, 
                   IllegalArgumentException,
                   InvocationTargetException;

关于桥接方法可以参考java method isBridge


Field

表示一个类的字段。

    public Class<?> getType() {
        return type;
    }

    public Type getGenericType() {
        ...
    }

返回该字段的类型。

getXXX(Object obj)

get方法用来获取字段的值。

  1. 若该字段是静态的,则obj传入null即可。
  2. 若字段是静态的,并且所属的类未被初始化,则初始化该类。
  3. 若是非静态的,则obj为所属类的实例。

setXXX(Object obj, XXX params)

设置该字段的值,可参照get方法。
若表示的字段是final的,参照Java反射机制可以动态修改实例中final修饰的成员变量吗?

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容