会计考友 发表于 2012-8-4 12:37:27

Java学习知识点要求(12)

Java学习知识点要求(12)
17、对象的初始化顺序,无继承时:先静态变量和静态代码块,再属性变量(对象变量)、再构造方法、再依照程序顺序执行其他语句;有继承时,先依次执行父类的静态变量,再子类的静态变量,在父类的属性变量,再父类的构造方法,在子类的属性变量,再子类的构造方法。(那些习题里有具体的)
(1)对象的初始化顺序
首先,创建一个对象。如果不创建一个类的对象,则永远不会建立该类中的静态对象。
变量在调用任何方法之前得到初始化。
初始化的顺序是首先static(如果它们尚未由前一次对象创建过程初始化),接着是非static对象。
在一个类里,初始化的顺序是由变量在类内的定义顺序决定的。
建立第一个类对象之后,类中静态对象才会被创建,从此之后类中的静态对象不会被初始化。
若数据是静态的(static),若只是声明,并没有初始化,如果它属于一个基本类型(主类型),而且未对其初始化,就会自动获得自己的标准基本类型初始值;如果它是指向一个对象,就会得到一个空值(NULL)。
(2)对象的创建过程 :
首次创建一个Dog类的对象时,Java解释器必须找到Dog.class,所有static初始化模块都会运行(static初始化仅发生一次 ) ,在内存堆(Heap)里为一个Dog对象分配足够多的存储空间 ,这种存储空间会清为零,将Dog中的所有基本类型设为它们的默认值 。
进行字段定义时发生的所有初始化都会执行。
执行构建器。
(3)明确进行的静态初始化
①静态块
class Spoon {
      static int i;
      static {
      i = 47;
      }
与其他static初始化一样,这段代码仅执行一次——首次生成那个类的一个对象时,或者首次访问属于那个类的一个static成员时(即便从未生成过那个类的对象)。
②非静态实例的初始化
{
    c1 = new Mug(1);
    c2 = new Mug(2);
    System.out.println("c1 & c2 initialized");
   }
(4)构建器的调用顺序
① 调用父类构造方法。这个步骤会不断重复下去,首先得到构建的是分级结构的根部,然后是下一个子类,等等。直到抵达最深一层的子类。
② 按声明顺序调用成员初始化模块。
③ 调用子类构造方法的主体。
页: [1]
查看完整版本: Java学习知识点要求(12)