JAVA程序的初始化遵循原则:

  • 静态对象(变量)优先于非静态对象(变量)初始化,其中静态对象(变量)只初始化一次,而非静态对象(变量)可以初始化多次。
  • 父类优先于子类初始化。
  • 按照成员变量定义的顺序初始化及时变量定义在各个方法定义之中,他们依然在任何方法(包括构造函数)被调用之前初始化。

Java程序初始化可以再许多不同的代码块中来完成,他们的执行顺序如下:
父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。’

注意:
1 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化)

2 静态方法:需要在项目启动的时候就初始化,在不创建对象的情况下,这种代码是被动执行的(静态方法在类加载的时候就已经加载 可以用类名直接调用)。

两者的区别是:静态代码块是自动执行的,

静态方法是被调用的时候才执行的.

静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次;

非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次

不创建类执行静态方法并不会导致静态代码块或非静态代码块的执行。

不创建类执行静态方法并不会导致静态代码块或非静态代码块的执行