6、ThinkInJava(java编程思想)第五章 构造器 笔记

第五章 初始化与清理

c++引入了构造器(construetor)的概念

5.1用构造器确保初始化

①通过提供构造器,类的设计者可确保每个对象都会得到初始化(可以假想为编写的每个类都定义一个initialize()方法)
②默认的构造器=无参构造器
③构造器有助于减少错误,并使代码更易于阅读
④构造器是一种特殊类型的方法,因为它没有返回值

5.2方法重载

1、所谓的方法则使给某个动作去的名字
2、构造器重启提供了多种方式创建对象
3、要是对明显相同的概念使用不同的民=名字,那一定会让人纳闷,方法的重载,完美的解决了这个问题

5.2.1设计基本类型的重载

1、基本类型能从一个“较小”的类型自动提升至一个“较大”的类型(char型略有不同,如果无法找到恰好接受char参数的方法,就会把char直接提升至int型)
2、如果传入的实际参数较大,就得通过类型转换来执行窄化转换,如果不这样做,编译器会报错

5.2.2以返回值区分重载方法(行不通)

5.4this关键字

面向对象语言在不同对象调用同一个方法时,会暗自把“所操作对象的引用”作为第一个参数传递给方法,案例如下

class Banana{void peel(int i){/*...*/}}
public class BananaPeel{
public static void main(String[] args){
 Banana a=new Banana(),
 b=new Banana();
 a.peel(1);
 b.peel(2);
 }
}

方法的调用其实是这样的

Banana.peel(a,1);
Banana.peel(b,2);

this关键字(上面的引用是编译器“偷偷”传入的,所有没有标识符可用,引入了this就是表示的当前的对象):
1、只能在方法内部使用,表示的对“调用方法的那个对象”的引用
2、当前方法中的this引用会自动应用于同一类中的其他方法,所以方法内部调用同一类中另一个方法this可以省略

5.4.1 在构造器中调用构造器

作用:为了避免代码的重复

5.4.2 staitc含义

1、staitc方法就是没有this的方法
2、static 方法不能调用非静态方法(非静态方法可以调用static方法)
因为可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法,这实际上就是static方法的主要用途
3、java中禁止使用全局方法,但是你在类中置入static方法就可以访问其他的static方法和static域
有些人认为static方法不是“面向对象”的,因为它们的确具有全局函数的含义,要是在代码中出现大量的static方法,就该重新考虑自己的设计了。

5.5 清理:终结处理的垃圾回收

java有垃圾回收器负责回收无用的对象占据的内存资源。
1、假定对象(并非使用new)获得一块“特殊”的内存区域,由于垃圾回收器只知道释放那些经由 new分配的内存,所以它不知道该如何释放该对象的这块“特殊”内存。
解决办法:java提供了finalize()方法
2、一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次来及回收动作发生时,才会真正回收对象占用的内存,所以要是你打算用finalize(),就能在垃圾回收时刻做一些重要的清理工作

5.5.1 finalize()用途何在

1、垃圾回收只与内存有关

5.6 成员初始化

Java尽力保证:所有变量在使用前都能得到恰当的初始化

1、对于方法的局部变量,java以编译时错误的形式来贯彻这种保证(方法的局部变量未初始化就被调用会报错)
2、在类里定义一个对象的引用时,如果不将其初始化,此引用就会获得一个特殊值null

5.6.1 指定初始化

变量赋初值方法
1、定义类成员变量的时候为其赋值
2、通过调用某个方法来提供初值

5.7 初始化构造器

1、无法阻止自动初始化的进行,它将在构造器被调用前发生

5.7.1 初始化顺序

先成员变量初始化------>再构造器

5.7.2 静态数据初始化

1、无论创建多少对象,静态数据都只占一份存储区域
初始化条件:
1、对象被创建或者第一次访问静态变量
2、特征:只初始化一次

5.7.3 显示的静态初始化

当首次生产这个 类的一个对象时,或者首次访问术语那个类的静态数据成员时(即便从未生成过那个类的对象)

5.7.4 非静态实例初始化

非静态变量初始化在调用构造器之前发生,属于对象

5.8.1 可变参数列表

java 5新特性
1、标准java库中的类能输出有意义 的内容(因为类型重写了toString()方法)
2、自建的类的对象,若不加toString()方法,只会输出地址。
3、在可变参数列表中可以使用任何类型的参数,包括基本类型

总结”:
构造器,精巧的初始化机制,暗示着初始化在java中占有至关重要的地位,大量的编程错误都源于不正确的初始化,构造器能够保证正确的初始化和清理(没有正确的构造器调用,编译器就不允许创建对象)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值