小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
上篇文章未讲完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容器动态提供这个对象所需要的 其他对象