第四章 初始化和清理

一、构造方法

1、默认构造方法

二、方法重载(的方式)

1、利用参数的顺序

2、利用参数的数据类型

3、利用参数的数量

4、利用不同的返回类型(方法型别)

三、关键字this

1、在构造方法中调用构造方法

  • 构造函数的调用动作必须置于最起始处  Constructor call must be the first statement in a constructor
  • 所以每个构造函数内部只能调用一个其他构造函数

四、清理:终结与垃圾回收

五、成员初始化

六、总结

这一章主要讲了初始化和垃圾清理,本书对初始化的描述都是比较基础的知识,相对比较熟悉;而垃圾清理是由"垃圾回收器"自动执行的,相对比较陌生。

"垃圾回收器"的确给程序员们们带来了极大的便利,功能也是相当的强大。它的运作方式也有多种,如:引用计数(reference counting,一种单纯、速度很慢的GC技术;计数,即是该对象被引用的次数,当计数器为0时便释放其所占用的内存)。然而为了更快的速度,它的真正原理是根据"存活于stack(栈)或static storage(静态存储空间)上"的reference而追踪到的对象,才算是尚存的对象,不被找到的对象便自然而然的变成了垃圾,这种方式下,JVM采用"自省式(adaptive)"垃圾回收机制。至于如何处处理存活对象,有"copy collectors"、"mark and sweep"、"stop-and-copy"等。不同的jdk版本会有不同的垃圾回收机制,然而本书是为Java 2而写的,如今的Java 8或许有更快、更好、更安全的"垃圾回收器"(今后有空继续研究),但不管怎样,对"垃圾回收器"还是有了一个浅显的认识。

纵使"垃圾回收器很强大",但还是有缺点。"垃圾回收器"只知道释放那些经由new分配得来的内存,因此它不知道如何释放你这个对象所占用的"特殊内存"(对象以"对象生成"之外的方式分配了某种存储空间),这时你就需要用到finalize()函数,它能让你在"垃圾回收时刻"执行某些重要的(你自己的)清理动作。然而finalize函数(或许还有其他的一些相关函数)具体如何使用,又在何时使用,本人并没有实际操作过。

总之,对于"垃圾回收器"算是有了一个很模糊的认识。以后有机会继续深入学习一下。

时间: 2024-10-14 06:33:30

第四章 初始化和清理的相关文章

Thinking In Java笔记(第五章 初始化与清理(三))

第五章 初始化与清理 5.6 成员初始化 Java尽力保证:所有变量在使用前都能得到恰当的初始化.对于方法的局部变量,Java以编译错误的形式来保证.如下: void f() { int i; i++; //Error:i not initialized } 会得到一条错误的消息,提示i可能没有初始化.编译器可以给i赋初值,但是并没有这么做,因为没有初始化是程序员的疏忽,为了保证程序的稳定性,能帮助程序员找出程序的缺陷所在. 但如果是类的数据成员是基本类型,类的每个基本类型成员变量都会保证有一个

Thinking In Java笔记(第五章 初始化与清理(二))

第五章 初始化与清理(二) 5.5 清理:终结处理和垃圾回收 清理的工作常常被忽略,Java有垃圾回收器负责回收无用对象占据的内存资源.但也有特殊情况:假定对象(并非使用new)获得了一块"特殊"的内存区域,由于垃圾回收器只知道释放那些由new分配的内存,所以不知道如何释放特殊内存.Java允许在类中定义一个名为finalize()的方法,工作原理"假定"是这样的:一旦垃圾回收器准备好释放对象占用的存储空间,首先调用其finalize()方法,并且在下一次垃圾回收动

Java编程思想---第五章 初始化与清理(下)

第五章 初始化与清理(下) 5.7 构造器初始化 可以使用构造器来进行初始化,在运行时可以调用方法或执行某些动作来确定初值,但是我们无法阻止自动初始化的进行,它将在构造器被调用之前发生.例如: public class Counter { int i; Counter() { i = 7; } } 那么i首先被置为0,然后变成7.编译器不会强制你一定要在构造器的某个地方或在使用它们之前对元素进行初始化,因为初始化早已得到了保证. 5.7.1 初始化顺序 在类的内部,变量定义的先后顺序决定了初始化

Java 编程思想 第五章 ----初始化与清理(1)

从今天开始每天一小时的java 编程思想的阅读和编码,其实就是把书上的代码抄下来. 5.5 清理:终结处理和垃圾回收 初始化和清理工作同等重要,但是清理工作却被常常忘记,但是在使用对象之后,对对象弃之不顾的做法并不是很安全.Java有自己的垃圾回收器负责回收无用的对象占据的内存资源.但也有特殊情况:假定你的内存区域不是用new获得的,这是无法用垃圾回收器释放所以java中允许在类中定义一个名为 finalize()的方法.       工作原理: 一旦垃圾回收器准备好释放对象占用的存储空间,将首

Java编程思想:第5章 初始化与清理

随着计算机革命的发展,“不安全”的编程方式已经逐渐成为编程代价高昂的主因之一. 初始化和清理,正是涉及安全的俩个问题. 5.1 用构造器确保初始化 构造器名与类名相同,没有返回值 5.2 方法重载 构造器的重载与方法重载 5.2.1 区分重载的方法 参数列表的不同(不同顺序也是重载,但不建议这么做) 5.2.2 涉及基本类型的重载 void print(char c){System.out.println("The character is "+c); }    void print(

Java - Thinking in Java 第5章 初始化与清理

初始化和清理(cleanup)是涉及安全的两个问题. 构造器确保类的初始化, 采用与类名相同的名称, 初始化期间自动调用构造器. 默认构造器就是不接受任何参数的构造器. 重载方法的函数名相同, 参数列表唯一. 如果传入的实际数据类型小于方法声明的形式参数类型, 实际数据类型就会提示. char类型可以匹配int类型, 作为参数传入. 函数没有构造器时, 编译器会自动创建一个默认构造器; 如果定义了一个构造器, 编译器就不会创建默认构造器. 版权声明:本文为博主原创文章,未经博主允许不得转载.

[Thinking in Java]第5章-初始化与清理

5.1 用构造器确保初始化 5.2 方法重载 5.3 缺省构造器 5.4 this关键字 5.5 清理:终结处理和垃圾回收 5.6 成员初始化 5.7 构造器初始化 5.8 数组初始化 5.9 枚举类型 目录 5.1 用构造器确保初始化 构造器有什么作用?用来创建对象?但new操作符才是用来创建对象的.试想一下,一个婴儿出生时,TA的基因和TA的性别等就已经初始化了,一个圆一旦画出来,它的半径就已经初始化了,因此一旦用new创建了一个对象,就必须要初始化.像C++那样,Java中也用构造器来初始

Thinking in JAVA笔记——第五章 初始化与清理

5.1用构造器确保初始化 为了确保安全性,强制在使用前进行初始化 Java构造器与类名相同,无参数构造器有叫做默认构造器. 5.2 方法重载 method overloading:重载,同名不同参 method overriding:重写/覆盖,子类覆盖父类 5.2.1区分重载方法 独一无二的参数类型表,否则编译不通过! 5.2.2涉及基本类型的重载 如果参数类型是int,short,byte,long等,自动定位到int而不会执行short,byte 因为默认常数就是int型,如果没有int,

《C++编程思想》第四章 初始化与清除(习题+解答)

相关代码: 1. #include <stdio.h> class tree { int height; public: tree(int initialHeight); ~tree(); void grow(int years); void printsize(); }; tree::tree(int initialHeight) { height = initialHeight; } tree::~tree() { puts("inside tree destructor&quo