javase

反射、Class类、Field类、Method类

2019-04-23  本文已影响0人  唯死撑尔

反射

Class类

Class类没有公共构造方法,所有创建Class的对象的方法有以下几种:

1.通过Class.forName()静态方法返回Class类的一个实例

Class cls = Class.forName("cn.gzsxt.test.Dog");

2.通过类名.class来获取一个Class类的实例

cls = Dog.class;

3.代码运行在非静态区,通过this.getClass()获取Class类的一个实例

Class cls = this.getClass();

Class类是对所有类的一个抽象,Class对象是用来对一个类进行描述

类的属性

获取类名

System.out.println(cls.getName());

获取类的修饰限定符

int modifiers = cls.getModifiers();

获取一个类的属性

1.根据一个属性名获取一个public属性的描述

Field field = cls.getField("属性名");

2.获取一个类的全部public属性的描述

Field[] fields = cls.getFields();

3.根据一个属性名获取一个在类中声明的属性的描述

Field declaredField = cls.getDeclaredField("属性名");

4.获取所有在类中声明的属性的描述

Field[] declaredFields = cls.getDeclaredFields();

获取一个类的方法

1.根据一个方法的名字获取类中的一个public的方法的描述

Method method = cls.getMethod("方法名", ...参数类型);

2.获取所有在类中是public的方法的描述

Method[] methods = cls.getMethods();

3.根据一个方法名获取在类中声明的一个方法的描述

Method method = cls.getDeclaredMethod(方法名, ...参数类型);

4.获取所有在类中声明的方法的描述

Method[] declaredMethods = cls.getDeclaredMethods();

通过反射创建一个对象

Object object = cls.newInstance();

Field 

获取属性的名字

System.out.println(field.getName());

获取属性的类型

Class strcls = field.getType();

System.out.println(strcls.getName());

获取属性的限定符

int modifiers = field.getModifiers();

System.out.println(modifiers);

暴力设置:设置field的访问

field.setAccessible(true);

有d对象,希望给d对象的gender属性赋值,可以使用set方法

field.set(d, "公");

返回d对象的gender属性的值,可以使用get方法

System.out.println(field.get(d));

Method 

获取方法名

System.out.println(method.getName());

方法的返回值类型

Class returnType = method.getReturnType();

System.out.println(returnType.getName());

方法的参数类型

Class[] paraType = method.getParameterTypes();

for (int i = 0; i < paraType.length; i++) {

System.out.println(paraType[i].getName());

}

获取方法的修饰符

int modifiers = method.getModifiers();

方法是可以执行的,使用invoke执行method对象所表示的方法

method.invoke(d, null);

上一篇 下一篇

猜你喜欢

热点阅读