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方法用来获取字段的值。
- 若该字段是静态的,则obj传入null即可。
- 若字段是静态的,并且所属的类未被初始化,则初始化该类。
- 若是非静态的,则obj为所属类的实例。
setXXX(Object obj, XXX params)
设置该字段的值,可参照get方法。
若表示的字段是final的,参照Java反射机制可以动态修改实例中final修饰的成员变量吗?