java反射所调用的类、方法说明

获取Class对象的几种方式

//通过类名获取
Person personOne = new Person();
Class personClass = Person.class;
//通过对象获取
Class aClass = personOne.getClass();
//通过全限定名获取
Class aClass2 = Class.forName("com.example.javalib.Person");
//通过newInstance来实例化aClass2对象
Object object1= aClass2.newInstance();

//获取指定getPosi(int p)方法
Method getPosi= aClass2.getDeclaredMethod("getPosi", int.class);

//获取指定MAIN_DISPLAY成员变量
Field DISPLAY = aClass2.getDeclaredField("MAIN_DISPLAY");

//调用getPosi方法
int posi = getPosi.invoke(aClass2,2);

java.lang.reflect.Field的getInt()方法用于获取必须为静态或实例字段类型的int值。此方法还用于获取通过扩展转换可转换为int类型的另一个基本类型的值。当一个类包含一个静态或实例int字段并且我们想要获取该字段的值时,则可以使用此方法返回Field的值。
用法:
public int getInt(Object obj)
throws IllegalArgumentException,IllegalAccessException

参数:此方法接受单个参数obj,它是要从中提取int值的对象。
返回值:此方法返回转换为int类型的字段的值。
异常:此方法引发以下异常:
IllegalAccessException:如果Field对象正在强制执行Java语言访问控制,并且基础字段不可访问。
IllegalArgumentException:如果指定的对象不是声明基础字段的类或接口的实例,或者无法通过扩展转换将字段值转换为int类型,则为false。
NullPointerException :如果指定的对象为null并且该字段是实例字段。
ExceptionInInitializerError:如果此方法引发的初始化失败。

int DISPLAY = aClass2.getDeclaredField("MAIN_DISPLAY").getInt(object1);

Class类getEnumConstants()方法getEnumConstants()方法在java.lang包中可用。
getEnumConstants()方法用于返回枚举常量数组,换句话说,可以说此方法用于返回此枚举类的元素。
getEnumConstants()方法是一个非静态方法,只能通过类对象访问,如果尝试使用类名称访问该方法,则会收到错误消息。
返回枚举常量时,getEnumConstants()方法不会引发异常。
语法:public T[] getEnumConstants();
参数:它不接受任何参数。
返回值:
此方法的返回类型为T [],它根据给定的情况返回以下值,它以与该对象表示枚举类型时声明的顺序相同的顺序返回枚举常量的数组。
当此类对象不表示枚举类型时,它返回null。

Constructor linkadd = aClass2.getDeclaredConstructor(new Class[]{Class.forName("java.net.InetAddress"), int.class});
Constructor fileCon = aClass2.getDeclaredConstructor();

//为反射对象设置可访问标志。为true时表明屏蔽java语言的访问检查,使对象的私有属性也可以被查询和设置。
DISPLAY.setAccessible(true);//设置为可访问

DISPLAY.set(object1, 1);//赋值

猜你喜欢

转载自blog.csdn.net/wyyother1/article/details/126153812