反射篇笔记
2023-12-13 10:02:33
反射的本质:加载类。
把某个类的字节码文件加载到内存中。并允许以变成的方式解剖类中的各种成分(成员方法,变量,构造器)。
例如在使用IDEA时,他的提示,就是利用反射,提前将类中的信息解剖展示出来。
反射的第一步:获取类的class对象
//1.通过类名获取class对象
Class a = User.class;
//2.通过全类名获取class对象
Class b = Class.forName("com.datatype.User");
//3.通过对象获取class对象
Class c = new User().getClass();
System.out.println(a==b);
System.out.println(c==b);
//其中a,b,c都是同一个对象。
2.1:通过反射获取构造器实例化对象
//获取类的class对象
Class<User> a = User.class;
//通过class对象获取有参构造器
Constructor<User> b = a.getDeclaredConstructor(Integer.class, String.class, Integer.class, Boolean.class);
//通过class对象获取无参构造器
Constructor<User> c = a.getDeclaredConstructor();
//修改成员的访问权限
b.setAccessible(true);
//通过反射创建类的实例
User user = b.newInstance(12, "李兆", 13, false);
System.out.println(user.toString());
2.2:.通过反射向字段赋值,在传递给对象
//通过全类名创建对象
Class a = Class.forName("com.datatype.User");
//获取无参构造
Constructor Aconstructor = a.getDeclaredConstructor();
//修改访问权限
Aconstructor.setAccessible(true);
//通过无参构造创建对象
User user = (User) Aconstructor.newInstance();
//获取字段
Field name = a.getDeclaredField("name");
name.setAccessible(true);
name.set(user, "李兆");
System.out.println(user);
2.3:通过反射运行方法
Class a = User.class;
//获取成员方法,需要参数-->方法名,参数类型
Method toString = a.getDeclaredMethod("toString");
System.out.println(toString.invoke(new User()));
对于注解的使用
文章来源:https://blog.csdn.net/weixin_55990599/article/details/134921889
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!