Java中的反射

作者: iDevOps | 来源:发表于2019-08-05 13:46 被阅读83次
什么是反射?
  • 反射是框架设计的灵魂
  • 正在运行的程序, 通过反射可以动态获取这个类的所有信息, 包括属性、方法、构造方法等
  • 可以反编译.class --> .java
常见的应用场景
  • Jdbc加载驱动
  • Spring Ioc
  • 框架的封装
通过反射获取Class对象的三种方式
  • 方式1
Class1 = Class.forName("com.test.domain.Person");
1. 将字节码文件加载进内存,返回Class对象
2. 多用于配置文件,将类名定义在配置文件中, 读取文件,加载类
  • 方式2
Class2 = Person.class;
1. 通过类名的属性class获取
2. 多用于参数的传递
  • 方式3
Person p = new Person();
Class3 = p.getClass();
1. 通过对象方法获取
2. 多用于对象的获取字节码的方式
通过反射创建对象
  • 无参构造器
Class<?> aClass = Class.forName("domain.Person");
// 创建Class对象所表示对象的一个新实例,调用了Person的无参构造方法
Object o = aClass.newInstance();
System.out.println(o.toString()); //Person{name='null', age=0}
  • 有参构造器
// 实例化有参构造函数
Class<?> aClass = Class.forName("domain.Person");
Constructor<?> constructor = aClass.getConstructor(String.class, Integer.class);
Person p  = (Person) constructor.newInstance("sn", 11);
System.out.println(p.toString());//Person{name='sn', age=11}
常见Api
方法名称 作用
getDeclaredMethods 获取该类的所有方法
getReturnType() 获取该类的返回值
getParameterTypes() 获取传入参数
getDeclaredFields() 获取该类的所有字段
setAccessible 允许访问私有成员

小补充: 如何禁止使用反射机机制创建对象
答: 将构造函数私有化

相关文章

网友评论

    本文标题:Java中的反射

    本文链接:https://www.haomeiwen.com/subject/atfmdctx.html