第五章 初始化与清理

2016-12-09  本文已影响13人  老茂在北京

用构造器确保初始化

类里的数据成员,有三个途径初始化:

重载

涉及基本类型的重载需要注意一下

默认构造器

默认构造器就是无参数构造函数,可以更改默认构造器。
如果定义了构造器,编译器就不会自动创建默认构造器

class Bird{
       Bird(int i){}
       Bird(double i) {}
 }
new Bird();//这样就会找不到构造器

this关键字

public class leaf{
int i=0;
leaf incres(){
        i++;
        return this;
}}
leaf x=new leaf();
x.incres().incres().i;//i=2

static的含义

清理:终结处理和垃圾回收

finalize()函数后面再深入学习

成员初始化

默认初始化是类的数据成员。而方法的数据成员需要手动。
自动初始化在构造器被调用前执行。

初始化顺序

变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,他们仍旧会在任何地方(包括构造器)被调用之前得到初始化。

静态数据的初始化

静态初始化只有在必要时刻才会进行。只有第一次访问静态数据是被初始化,此后,静态对象不会再次被出书画。

总结对象的创建过程:

  1. 即使没有显示使用static关键字,构造器实际上也是静态方法。当首次创建类型为Dog的对象时,或者Dog类的静态方法/静态域首次被访问时,Java解释器必须查找类途径,以定位Dog.class.
  2. 然后载入Dog.class, 有关所有静态初始化的动作都会执行。因此,静态初始化只在class对象首次加载的时候进行一次
  3. 当用new Dog()创建对象的时候, 首先将在堆上为Dog对象分配足够的存储空间、
  4. 这块存储空间被清零。设置为默认值0 or null
  5. 执行所有出现于字段定义处的初始化动作
  6. 执行构造器

数组的初始化

int[] a1={1,2,3,4,5};
int[] a2=a1;//两者指向同一片内存空间
a1.length;//length是数组的固有成员
int[] a=new int[num];
int[] b;
b=new int[num];
Integer[] a= {new Integer(1), new Integer(2), 3,};
Integer[] b=new Integer[]{new Integer(1), new Integer(2), 3,};
System.out.println(Arrays.toString(a));
上一篇 下一篇

猜你喜欢

热点阅读