java类的初始化过程

、java类中的字段,第一步是自动初始化,好比定义了 
java

Java代码  收藏代码ide

  1. private int i;  spa


因为没有给其赋值,i会被自动赋值为0。这个步骤是仅限于类中的字段的,若是方法中的临时变量,不会有这个动做。并且若是在方法中使用未经赋值的变量,编译会不经过 

二、第二步是指定初始化 
orm

Java代码  收藏代码对象

  1. private int i = 3;  blog


若是有了显式的赋初值,那么第一步的自动初始化就不会发生了。可是该步骤和自动初始化,一定发生其一。即便在构造方法里给i赋值为4,仍是首先会调用指定初始化,先赋值成3再赋值成4 

三、第三步是初始化语句块初始化 
it

Java代码  收藏代码io

  1. {  编译

  2.     i = 4;  class

  3. }  


这个动做发生在自动初始化或者指定初始化以后,发生在构造方法初始化以前。若是没有初始化语句块,那么这个步骤就不会发生 

四、第四步才是构造方法中的初始化 

Java代码  收藏代码

  1. public className(){  

  2.     i = 4;  

  3. }  


这个动做是发生在初始化语句块以后,若是没有的话,就是发生在自动初始化或者指定初始化以后。这个动做也是初始化的最后一个步骤 

五、在类中的任何方法执行以前(包括构造方法),首先会完成全部字段的初始化 

六、类只在初次使用时才会被加载。“初次使用”一般是指建立类的第一个对象时,或者当初次访问类中的static字段或者static方法时。可是因为构造方法实际上也是static方法(只是static关键字没有要求显式地写出来),因此也能够说,类的加载是发生在类的任何static成员(包括static字段、static方法、构造方法)被初次访问时 

七、当初始化类的字段时,会先初始化static字段,再初始化非static字段 

八、在调用构造方法时,会从最顶端的基类开始,依次调用每一个类的构造方法。若是基类的构造方法是默认构造方法(不含构造方法参数),那么就不须要显式地调用super(),可是若是基类只包含含参数的构造方法,就必须显式地调用super()

本文来自iteye blog: kyfxbl

相关文章
相关标签/搜索