Java 反射机制(二)

123 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

上篇文章未讲完Java反射机制,这篇文章继续讲初始化以及初始化的时机,以及对于我们常用Spring Ioc 和Aop的作用,请继续往下看。

初始化
JVM执行类的初始话语句,为类的静态变量赋值

  • 如果这个类还没有被加载和连接,那就先进行加载和连接
  • 如果这个类存在父类,并且父类还没有初始话,那就先初始化父类
  • 如果类中存在初始化语句(Static块),依次执行初始化语句

类完成初始化的时机

  • 创建类的实例 new xxxClass() || Class.newInstance() || constructor.newInstance() •
  • 访问某种的某个静态变量,或者对静态变量进行赋值
  • 调用类的静态方法
  • Class.forName("包类名"),因为forName里有一个init参数是 true
  • 完成子类的初始化,也会完成对本类的初始化(接口除外)
  • 该类是程序引导入口(main入口 或者test入口)

Class对象的获取方式

  • Class clazz = xxxClass.class;//没有完成初始化过程
  • Class class = instanceObj.getClass;//对象已生成,完成 初始化过程
  • Class clazz = xxxClassLoader.loadClass("包类名");//未 完成初始化过程
  • Class clazz = Class.forName("包类名");//完成初始化过程

Spring Ioc 、AOP

IOC(Inversion of Control) 控制反转是一种设计思想,并非实际的技术,最核心的思想就 是将预先设计的对象实例创建的控制权交给程序(IOC容器)。

注:IOC容器大家可以简单认为是一个KV的Map集合。

DI(Dependency Injection) 依赖注入,对象的构建过程中,IOC容器动态提供这个对象所需要的 其他对象