Java基础回顾:反射Reflect

1)基本思想
反射可以在程序运行过程中动态获取类信息和调用类方法
 
通过反射构造类实例
 
通过反射调用方法
Class clazz = Class.forName("com.bean.SmallPineapple"); 
Constructor constructor = clazz.getConstructor(String.class, int.class); 
constructor.setAccessible(true); 
SmallPineapple sp = (SmallPineapple) constructor.newInstance("小菠萝", 21); 
Method method = clazz.getMethod("getInfo"); 
if (method != null) { 
	method.invoke(sp, null); 
}
 
正射:new一个对象,这种方式是在编译期就把对象的类型给定下来,运行过程中无法修改,需要修改源码重新编译。
反射:可以在运行时确定使用哪一个数据类,在切换类时,无需修改源码、编译程序。
 
2)基本使用
Java反射的主要组成部分有四个核心类(java.lang.reflect 包):
  • Class:任何运行在内存中的所有类都是该Class类的实例对象,每个Class类对象内部都包含了本来的所有信息。
  • Field:描述一个类的属性,内部包含了该属性的所有信息,例如数据类型,属性名,访问修饰符……
  • Constructor:描述一个类的构造方法,内部包含了构造方法的所有信息,例如参数类型,参数名称,参数访问修饰符……
  • Method:描述一个类的所有方法,包括抽象方法,内部包含了该方法的所有信息,与Constructor类似,不同之处是Method拥有返回值类型信息,因为构造方法是没有返回值的。
 
Class对象中包含了该类的所有信息
 
3) 应用场景
  • Spring实例化对象:当程序启动时,Spring会读取配置文件 applicationContext.xml 并解析出里面所有的标签实例化到 IOC 容器中。
  • 反射 + 工厂模式:通过反射消除工厂中的多个分支,如果需要生产新的类,无需关注工厂类,工厂类可以应对格之格新增的类,反射可以使得程序更加健壮。
  • JDBC连接数据库:使用JDBC连接数据库时,指定连接数据库的驱动类时用到反射加载驱动类。
4)反射优缺点
优点:
  • 增加程序的灵活性
缺点:
  • 破坏类的封装性:可以强制访问private修饰的信息
  • 性能损耗

 

参考:https://juejin.cn/post/6864324335654404104

posted @ 2021-10-16 18:11  fanghuiX  阅读(49)  评论(0编辑  收藏  举报