Java反射机制


通过反射创建一个对象(三步)
第一步:获取类的信息
参数:包名+类名
Class class = Class.forName("com.javawu.reflect.Demo");
第二步:获取类的构造方法
参数:构造方法需要传递的参数的Class
Constructor constructor = class.getConstructor(String.class, int.class);
第三步:根据获取到的构造方法传递相应的参数创建对象
Demo demo = (Demo)constructor.newInstance("张三", 55);

反射机制是什么

反射机制是在运行状态中,对于任意一个类,能够知道这个类的所有属性和方法,对于任意一个对象,能够调用它的任意一个方法和属性。
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的放射机制。

反射机制能做什么

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法
  • 生成动态代理

获取类的类信息

//参数需要带上类所在的包名
Class class = Class.forName("com.javawu.reflect.Person");

获取类中的所有公有构造方法

Constructor[] constructors = class.getConstructors();

获取类中的所有的共有的和私有的构造方法

constructors = class.getDeclaredConstructors();

获取某个构造方法

  • 获取不带参的构造方法
Constructor constructor = class.getConstructor();
  • 获取参数为String和int类型的构造方法
constructor = class.getConstructor(String.class, int.class);
//传递数组参数
//Class[] params = {String.class, int.class};
//class.getConstructor(params);
  • 当构造方法为private时,需要设置访问权限
constructor.setAccessible(true);
  • 根据构造方法创建该类的对象
person = (Person)constructor.newInstance("参数");

获取构造方法名

constructor.getName();

获取构造方法的参数的Class数组

Class[] params = constructor.getParemeterTypes();

获取类中的所有public方法(包括父类的方法)

Method[] methods = class.getMethods();

获取类中所有的方法(不包括父类的方法)

methods = class.getDeclaredMethods();

获取指定方法名和参数的方法

//第一个参数:方法的名字 第二个参数:方法的参数的Class
Method method = class.getMethod("eat", null);

调用方法

Person person = new Person();
//第一个参数:执行方法的对象 第二个参数:方法的参数
method.invoke(person, null);

调用静态方法

method.invoke(null, 参数)

获取类中的所有public属性

Field[] fields = class.getFields();

获取类中的所有属性

fields = class.getDeclaredFields();

获取指定属性名的属性

Field field = calss.getField("name");
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容