美文网首页Java编程思想
《JAVA编程思想》学习笔记:第5章(初始化和清理)

《JAVA编程思想》学习笔记:第5章(初始化和清理)

作者: 编程家园 | 来源:发表于2020-02-03 12:26 被阅读0次

    第五章、初始化和清理

    5.1 构造器方法

    特征:语法上无返回字段(比如void),并用于放置对象初始化的相关代码块。

    5.2 方法重载(method overloading)

    方法名相同,形式参数列表不同(参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同)。重载是面向对象的一个基本特性。

    a. 声明为final的方法不能被重载。

    b. 声明为static的方法不能重载,但是能够被再次声明。

    c. 重载方法的返回类型可以相同也可以不同,但仅返回类型不同不足以成为方法重载。

    d. 编译器根据调用方法的签名逐个匹配,以选择对应方法的过程叫做重载分辨(Overload Resolution,或叫重载决议)。

    5.3 this 关键字

    `this` 关键字只能在方法内部使用,表示对“**调用方法的那个对象**”的引用。

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

    5.4.1 finalize()

    a. Java中的finalize()不等于C++中的析构函数(不一定会执行);

    Java并未提供“析构函数”或相似的概念,Java的“垃圾回收”不保证一定会发生,所以要做类似的清理工作,必须自己动手创建一个执行清理工作的普通方法。

    只要程序没有濒临存储空间用完的那一刻,垃圾回收可能就会一直没有发生。这个策略是恰当的,因为垃圾回收本身也有开销,要是不使用它,那就不用支付这部分开销了。

    b. 当发生“垃圾回收”时,finalize()才得到调用;

    c. Java里的对象并非总是被垃圾回收(因为Java的“垃圾回收”并不能保证一定会发生)

    对象可能不被垃圾回收;

    5.4.2 finalize()用途何在

    a. 由于垃圾回收器会负责释放对象占据的所有内存,这就将finalize()的需求限制到一种特殊情况,即通过某种创建对象方式以外的方式为对象分配了存储空间。由于Java中一切皆为对象,所以那种特殊情况主要发生在使用“本地方法”的情况下,本地方法是一种在Java中调用非Java代码的方式。

    b. 不要过多地使用finalize(),它不是进行普通的清理工作的合适场所。

    Joshua Bloch在题为“避免使用终结函数”一节中走得更远,他提到:“终结无法预料,常常是危险的,总之是多余的。”《Effective Java》,第20页,(Addison-Wesley 2001)

    5.5 成员初始化

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

    a. 对于方法的局部变量,如果使用前没有初始化,Java以编译时错误(注意,如果方法内的局部变量未被使用,将不会编译错误)的形式来贯彻这种保证。

    b. 对于类的成员变量:

    成员变量是基本类型,Java会自动初始化初值0;

    成员变量是引用类型,Java会自动初始化初值null;

    初始化赋值的三种方法:

    a. 对象引用赋值:ClassDemo a =b ;

    b. 创建对象赋值:ClassDemo a = new ClassDemo() ;

    c. 方法赋值:ClassDemo a = getClassDemoInstance() ;

    5.6 构造器初始化

    5.6.1 初始化执行顺序:

    step1: static成员变量(类成员变量)和 static {}代码块:按照代码前后物理顺序;

    step2: 实例成员变量和非static{}代码块:按照代码前后物理顺序;

    step3: 构造器方法

    stpe4: 对象方法(Instance method)被执行

    5.7 数组初始化

    可以将Java中的数组作为一种数组类型来理解。

    如 int[] a; 可以认为是 a 是一个数组引用,初始值为null

    初始化:

    int[] a = new int[3]; 初始化各元素值为0,对于boolean,初始值为false;

    int[] a = {1, 2, 3}; 初始化元素分别为1, 2, 3;

    5.8 枚举类型

    一种数据类型,本质同Class类型(当由javac编译&转换为*.class二进制流文件时)。

    eg: Spiciness spiciness = Spiciness.Medium;

    相关文章

      网友评论

        本文标题:《JAVA编程思想》学习笔记:第5章(初始化和清理)

        本文链接:https://www.haomeiwen.com/subject/rplhxhtx.html