Java反射

来源:互联网 发布:autodesk的造型软件 编辑:程序博客网 时间:2024/06/06 16:35

概念

指的是可以于运行时加载,探知和使用编译期间完全未知的类。
Class类与java.lang.reflect类库一起对反射进行了支持,该类库包含Field、Method和Constructor类,这些类的对象由JVM在启动时创建,用以表示未知类里对应的成员。

获取一个Class

  1. Class.forName(“ren.liushuang.test.reflect.User”)
  2. user.getClass();
  3. User.class

Field属性

类的属性,可以通过userClass.getFields()获得Field[]
* getFields()只能访问类中声明为公有的字段,私有的字段它无法访问,能访问从其它类继承来的公有方法.
* getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法
* 通过设置age.setAccessible(true);可以改变private的对象的属性

Class<?> classUser = Class.forName("ren.liushuang.test.reflect.User");User user1 = (User)classUser.newInstance();Field age = classUser.getDeclaredField("age");age.setAccessible(true);age.set(user1,18);

Method方法

获取类对应的方法,相同方法名不同参数类型的是不同的方法。
通过invoke进行调用,需要传入对应的参数。

Method setAge = classUser.getDeclaredMethod("setAge", Integer.class);setAge.invoke(user1, 19);

创建一个java对象的方法

  1. new
  2. 反射
  3. 反序列化
  4. clone
原创粉丝点击