Java编程思想第四版第五章学习(3)

1.在构造器中调用构造器(Java编程思想第四版P86)
notice:
(1) 构造器Flower(String s, int petals)表明:尽管可以用this调用一个构造器,但却
不能调用两个。此外,必须将构造器调用置于最起始处,否则编译器会报错。
(2) 当参数s的名称和数据成员s的名字相同,可以使用this.s来代表数据成员。
(3) 除构造器外,编译器禁止在其他任何地方中调用构造器。
Flower构造器如下:

 Flower(String s, int petals){
 this(petals);
 //!  this(s); //Can't call two!
 this.s = s ; //Another use of “this”
 ....
 }

2.清理:终结处理和垃圾回收
(1)在C++中,对象一定会被销毁(如果程序中么有缺陷),但在Java中,对象并非总是被
垃圾回收。或者说,垃圾回收不等于C++中的“析构”。
(2)在Java中,允许在类中定义一个名为finalize()的方法,其工作原理是,一旦垃圾回
收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾
回收动作发生时,才真正回收对象占用的空间。
(3)为啥要用finalize():因为在分配内存时可能采用了“本地方法”,即在Java中调用非
Java代码的方式。(目前支持C和C++,而C和C++可以调用其他语言写的代码。)如果调用
了C语言中的malloc()函数,而没有调用free()函数,那么内存空间得不到释放,此时需要
在finalize()中用本地方法调用free()。

3.垃圾回收器如何工作
关键技术:(1)引用记数 (2)自适应方法:停止-复制,标记-清扫

4.成员初始化
(1)类的数据成员是基本类型的,默认初始化。
(2) 变量也可指定初始化或通过构造器和方法完成初始化。
(3) 在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定
义之间,它们仍然会在任何方法(包括构造器)被调用之前得到初始化。例如,Java编程
思想第四版P94。
(4)静态数据的初始化,解读P95的例子。
a. 要执行main方法,必须先加载StaticInitialization,加载过程中,发现有静态变量
table,首先执行static Table table = new Table()。newTable()需要实例化Table,必须先加载Table类。加载Table类的过程中,
发现Table类也有静态变量,首先执行static Bowl b1 = new Bowl(1);过程和上面一样,要去创建Bow1。
创建之前加载Bow1类,加载完毕,调用Bow1的构造方法,于是打印出“Bowl(1)” b1实例化(创建)完成。
然后执行static Bowl b2 = new Bowl(2); 再次调用Bow1构造方法,打印“Bowl(2)”。
这时候Table类加载完毕,开始实例化t2变量,调用Table类构造方法,打印“Table()”。
执行b2.f(1); 打印“f(1)”

b. 道理和上面a一样,只是在Cupboard中,static变量初始化完毕之后,还要去初始化一
个非static变量bowl3。依次打印出”Bowl(4)”,”Bowl(5)”,”Bowl(3)”。再调用Cupboard类
构造方法,打印”Cupboard()”。执行bowl4.f1(2),打印“f1(2)”。最后执行main中的方法,
注意的是,此时Table,Cupboard这2个类的加载过程已经完成,之后创建这2个类的实例
的过程中,不再去初始化static变量。

(5) 显示的静态初始化
Java允许将多个静态初始化动作组织成一个特殊的“静态子句”(静态块)。
例如:

static Cup cup1;
    static Cup cup2;
    static {
        cup1 = new Cup(1);
        cup2 = new Cup(2);
    }
(6) 非静态实例初始化子句
{
        mug1 = new Mug(1);
        mug2 = new Mug(2);
        System.out.print("mug1 & mug2 initialized");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值