一个类中包含,基本类型的静态变量,引用型的静态变量,非静态基本类型变量,非静态引用类型变量,构造器,静态方法,非静态方法,静态域 static{}
这些变量可以定义在类内部的任何位置。
关键点:静态区只要初始化一次,以后每次都不用进行初始化。静态区包括静态变量和静态方法
1.没有继承时即根类是Object
当第一次显示的调用静态的变量或方法时,类名.变量或方法。这时类中的所有的static修饰的方法或变量按照顺序初始化,然后都被加载到静态区,占用唯一的地址。在下一次new一个类的对象时,这些static修饰的都不需要被初始化了,因为已经被加载到静态区了,使用的话直接使用类名.()。然后首先按照定义的顺序初始化非静态的变量,最后调用构造器,就可以生成这个对象了。
如果没有调用静态而是第一次new时,首先按照上述首先是初始化所有的静态变量或者方法加载到静态区域。然后首先按照定义的顺序初始化非静态的变量,最后调用构造器,就可以生成这个对象了。下次在new时静态区都不用初始化了直接进行后面的步骤:首先按照定义的顺序初始化非静态的变量,最后调用构造器,就可以生成这个对象了。
2.当一个类继承了一个类时。
当调用子类的静态区或者new对象时,首先判断有没有extends有的话,在父类中再次判断有没有extends,直到最基层的父类为止。按照第一条,如果最基层的父类静态区已经被初始化了,那就继续下一层,总之,如果某个类的静态区没被初始化那就进行初始化,直到最底层的子类静态区初始化完毕。然后再从基层的父类开始初始化非静态区,然后调用构造器。然后在进行下一层类的非静态初始化,在调用这个类的构造器。依次类推直到最底层的子类调用构造器结束后,才完成一个对象的创建。
注意:main方法在某个类中也是static的所以,运行时会进行静态区的初始化。