[jvm规范中类的初始化与实例化]和[spirng中bean的实例化与初始化]的区别

目录

jvm规范中有类的初始化与实例化:

Spring Bean的实例化和初始化:

联系与区别:


jvm规范中有类的初始化与实例化:

父类的类构造器() -> 子类的类构造器() -> 父类的成员变量和实例代码块 -> 父类的构造函数 -> 子类的成员变量和实例代码块 -> 子类的构造函数。

类构造器()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块static{}中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序所决定的,静态语句块只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块可以赋值,但是不能访问。

类构造器()对于类或者接口来说并不是必需的,如果一个类中没有静态语句块,也没有对类变量的赋值操作,那么编译器可以不为这个类生产类构造器()。

虚拟机会保证一个类的类构造器()在多线程环境中被正确的加锁、同步,如果多个线程同时去初始化一个类,那么只会有一个线程去执行这个类的类构造器(),其他线程都需要阻塞等待,直到活动线程执行()方法完毕。特别需要注意的是,在这种情形下,其他线程虽然会被阻塞,但如果执行()方法的那条线程退出后,其他线程在唤醒之后不会再次进入/执行()方法,因为 在同一个类加载器下,一个类型只会被初始化一次。

Spring Bean的实例化和初始化:

实例化----实例化的过程是一个创建Bean的过程,即调用Bean的构造函数,单例的Bean放入单例池中

初始化----初始化的过程是一个赋值的过程,即调用Bean的setter,设置Bean的属性。

联系与区别:

sping中bean的实例化包含jvm规范中类的初始化与实例化。

spirngbean实例化父类的类构造器() -> 子类的类构造器() -> 父类的成员变量和实例代码块 -> 父类的构造函数 -> 子类的成员变量和实例代码块 -> 子类的构造函数。->springbean初始化。

 

参考链接:

https://blog.csdn.net/justloveyou_/article/details/72466105

https://blog.csdn.net/justloveyou_/article/details/72466416

https://blog.csdn.net/u010634066/article/details/80321854

 

 

 

 

 

 

你可能感兴趣的:(java基础)