编程知识 cdmana.com

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

目录
Java编程思想(一)第1~4章:概述
Java编程思想(二)第5章:初始化和清理
Java编程思想(三)第6章:访问权限
Java编程思想(四)第7章:复用类
Java编程思想(五)第8章:多态
Java编程思想(六)第9章:接口
Java编程思想(七)第10章:内部类
Java编程思想(八)第11章:持有对象
Java编程思想(九)第12章:异常
Java编程思想(十)第13章:字符串
Java编程思想(十一)第14章:类型信息
Java编程思想(十二)第15章:泛型
Java编程思想(十三)第16章:数组
Java编程思想(十四)第17章:深入研究容器
Java编程思想(十五)第18章:Java I/O系统
Java编程思想(十六)第19章:枚举
Java编程思想(十七)第20章:注解
Java编程思想(十八)第21章:并发

第五章、初始化和清理

本篇目录

5.1 构造器方法

5.2 方法重载(method overloading)

5.3 this 关键字

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

5.5 成员初始化

5.6 构造器初始化

5.7 数组初始化


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;

 

版权声明
本文为[架构师训练营]所创,转载请带上原文链接,感谢
https://cbk419323.blog.csdn.net/article/details/104092105

Scroll to Top