Java 编程思想拾零 (第五章)
2010-03-14 15:10
288 查看
第五章 [/b]初始化与清理[/b]
[/b]
[/b]随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。[/b]
[/b]
5.1 用构造器确保初始化
在java中,“初始化”和“创建”捆绑在一起,两者不能分离。
5.2 方法重载 Overload
5.2.1 区分重载方法
要是几个方法有相同的名字,Java如何才能知道你指的是哪一个呢?其实规则很简单:每个重载的方法都必须有一个独一无二的参数[/i]类型列表[/i][/b]。
(虽然说,参数顺序的不同也足以区分两个方法,但,Eckle不推荐我们这么做)
5.2.2 涉及基本类型的重载
如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提升。反之,则必须“穿小鞋”(强制)转换,否则,编译器报错。
(其实,很好理解,想象你穿越回某个古代,摇身一变富贾四方,妻妾成群,算了,不说了。)
5.2.3 以返回值区分重载方法
JVM
say s: Sorry, I think you could ignore the return value.
5.3 默认构造器
要是你没有提供任何构造器,JVM
think : you need a constructor , I make one for u. 如果你自己搞了一个(不论是否有参数),JVM think : you have constructor(s), so you know the law.然后,高喊着“我是打酱油的”跑开。。。
5.4 this关键字
this
: 当前对象的引用。只有当需要明确指出对当前对象的引用时,才需要使用this关键字。
5.4.1 在构造器中调用构造器
this(参数列表); // 同super(), 要写在构造器的第一句,且只能写在构造器内部,且只能写一个。
5.4.2 static关键字
Static方法就是没有this的方法。在没有任何对象的前提下,仅仅通过类本身来调用static方法 --- 这实际上正是static方法的主要用途。
5.5 清理: 终结处理和垃圾回收
垃圾回收器只知道释放那些由“new”分配的内存。
Java允许类中定义finalize()方法,其工作原理(“假定”)是:一旦垃圾回收器准备好释放对象占用的存储空间,将先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。
不该,将“finalize”作为通用的清理方法。
之所以有finalize,是由于在分配内存时可能采用了类似C语言的做法,而非java中的通常做法。
不要过多地使用finalize().[/b]
5.5.2 你必须实施清理
无论是“垃圾回收”还是“终结”,都不保证一定会发生。如果Java虚拟机并为面临内存耗尽的情况,它是不会浪费时间去执行垃圾回收以恢复内存的。
5.5.3 终结条件
通常,不能指望finalize(),必须创建其他的“清理”方法,并且明确地调用它们。
finalize()还有一个有趣的用法 à 对象终结条件[/b]验证。
System.gc()
强制进行终结。
super.finalize();
5.5.4 垃圾回收器如何工作
“自适应的、分代的、停止-复制、标记-清扫”式垃圾回收器
5.6 成员初始化
Java尽力保证:所有变量在使用前都能得到恰当的初始化。
类的每个基本类型数据成员保证都会有一个初始值。
5.7 构造器初始化
无法阻止自动初始化[/b]的进行,它将在构造器被调用前发生。
5.7.1 初始化顺序
在类内部,变量定义的先后顺序决定了初始化的顺序。即使变量散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用前得到初始化。
5.7.2 静态数据的初始化
初始化的顺序是先静态对象[/b](如果它们尚未因前面的对象创建过程而被初始化)(静态的东西只初始化一次),而后是“非静态”对象[/b]。
构造器实际上也是静态方法。为什么?记住了,静态的东西是属于类的。
5.7.3 显式的静态初始化
“静态子句”
与其他静态初始化一样,静态子句也仅执行一次:当首次生成这个类的一个对象时,或者首次方位属于哪个类的静态成员时。
5.8 数组初始化
int[]
a1 = {1, 2, 3, 4, 5};
int[]
a2 = a1;
int[]
a3 = new int[5];
Integer[]
a = { new Integer(3), new Integer(6) };
Integer[]
b = new Integer[]
所有的数组都有一个固定成员length.
Arrays
( java.util ) 包中有很多好东西,比如toString(), sort() 还有 asList()等吧。。。很实用的静态方法。
5.8.1 可变参数列表 Java SE5
有了可变参数,就再也不用显式地编写数组语法了,当你指定参数时,编译器实际上会为你去填充数组。你获得的仍旧是个数组。
Eckel[/i][/b]建议[/i][/b]: 你应该总是旨在重载方法的一个版本上使用可变参数列表,或者压根就不使用它。
5.9 枚举类型 Java SE5
编译器还会自动赋予一些有用的特新性: toString(), ordinal()方法。。。
Switch可用。
[/b]
[/b]随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。[/b]
[/b]
5.1 用构造器确保初始化
在java中,“初始化”和“创建”捆绑在一起,两者不能分离。
5.2 方法重载 Overload
5.2.1 区分重载方法
要是几个方法有相同的名字,Java如何才能知道你指的是哪一个呢?其实规则很简单:每个重载的方法都必须有一个独一无二的参数[/i]类型列表[/i][/b]。
(虽然说,参数顺序的不同也足以区分两个方法,但,Eckle不推荐我们这么做)
class OverloadOrder{ static void f(int i, String s){ …… } static void f(String s, int i,){ …… } } |
如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提升。反之,则必须“穿小鞋”(强制)转换,否则,编译器报错。
(其实,很好理解,想象你穿越回某个古代,摇身一变富贾四方,妻妾成群,算了,不说了。)
5.2.3 以返回值区分重载方法
JVM
say s: Sorry, I think you could ignore the return value.
5.3 默认构造器
要是你没有提供任何构造器,JVM
think : you need a constructor , I make one for u. 如果你自己搞了一个(不论是否有参数),JVM think : you have constructor(s), so you know the law.然后,高喊着“我是打酱油的”跑开。。。
5.4 this关键字
this
: 当前对象的引用。只有当需要明确指出对当前对象的引用时,才需要使用this关键字。
5.4.1 在构造器中调用构造器
this(参数列表); // 同super(), 要写在构造器的第一句,且只能写在构造器内部,且只能写一个。
5.4.2 static关键字
Static方法就是没有this的方法。在没有任何对象的前提下,仅仅通过类本身来调用static方法 --- 这实际上正是static方法的主要用途。
5.5 清理: 终结处理和垃圾回收
垃圾回收器只知道释放那些由“new”分配的内存。
Java允许类中定义finalize()方法,其工作原理(“假定”)是:一旦垃圾回收器准备好释放对象占用的存储空间,将先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。
1: 对象可能永远不被垃圾回收; |
2:垃圾回收并不等于“析构”; |
3:垃圾回收只于内存有关; |
之所以有finalize,是由于在分配内存时可能采用了类似C语言的做法,而非java中的通常做法。
不要过多地使用finalize().[/b]
5.5.2 你必须实施清理
无论是“垃圾回收”还是“终结”,都不保证一定会发生。如果Java虚拟机并为面临内存耗尽的情况,它是不会浪费时间去执行垃圾回收以恢复内存的。
5.5.3 终结条件
通常,不能指望finalize(),必须创建其他的“清理”方法,并且明确地调用它们。
finalize()还有一个有趣的用法 à 对象终结条件[/b]验证。
System.gc()
强制进行终结。
super.finalize();
5.5.4 垃圾回收器如何工作
“自适应的、分代的、停止-复制、标记-清扫”式垃圾回收器
5.6 成员初始化
Java尽力保证:所有变量在使用前都能得到恰当的初始化。
类的每个基本类型数据成员保证都会有一个初始值。
5.7 构造器初始化
无法阻止自动初始化[/b]的进行,它将在构造器被调用前发生。
5.7.1 初始化顺序
在类内部,变量定义的先后顺序决定了初始化的顺序。即使变量散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用前得到初始化。
5.7.2 静态数据的初始化
初始化的顺序是先静态对象[/b](如果它们尚未因前面的对象创建过程而被初始化)(静态的东西只初始化一次),而后是“非静态”对象[/b]。
构造器实际上也是静态方法。为什么?记住了,静态的东西是属于类的。
5.7.3 显式的静态初始化
“静态子句”
与其他静态初始化一样,静态子句也仅执行一次:当首次生成这个类的一个对象时,或者首次方位属于哪个类的静态成员时。
|
int[]
a1 = {1, 2, 3, 4, 5};
int[]
a2 = a1;
int[]
a3 = new int[5];
Integer[]
a = { new Integer(3), new Integer(6) };
Integer[]
b = new Integer[]
所有的数组都有一个固定成员length.
Arrays
( java.util ) 包中有很多好东西,比如toString(), sort() 还有 asList()等吧。。。很实用的静态方法。
5.8.1 可变参数列表 Java SE5
有了可变参数,就再也不用显式地编写数组语法了,当你指定参数时,编译器实际上会为你去填充数组。你获得的仍旧是个数组。
Eckel[/i][/b]建议[/i][/b]: 你应该总是旨在重载方法的一个版本上使用可变参数列表,或者压根就不使用它。
5.9 枚举类型 Java SE5
public enum Spiciness { NOT, MILD, MEDIUM, HOT, FLAMING } 某main: Spiciness howHot = Spiciness.NOT; |
Switch可用。
相关文章推荐
- java编程思想笔记第五章
- 【Java编程思想笔记】第五章-初始化与清理
- Java编程思想 ——第五章 初始化与清理
- java编程思想-第五章-初始化与清理
- java编程思想 第五章初始化与清理
- JAVA 编程思想 第4版 学习笔记 - 第五章
- java 编程思想的学习笔记 - 第五章 初始化与清理
- JAVA编程思想-第五章 初始化与清理
- java编程思想---第五章(初始化与清理)
- java 编程思想 第五章 初始化与清理
- Java 编程思想拾零 (三、四章)
- Java编程思想---第五章笔记
- JAVA编程思想学习总结:第五章——初始化与清理
- Java 编程思想 第五章 ----初始化与清理(1)
- Java编程思想——第五章 清理与初始化
- 《Java 编程思想》--第四章:控制执行流程,第五章:初始化与清理
- JAVA编程思想学习 --- 第五章 (隐藏实施过程)
- 重读_java编程思想_1
- Java编程思想 第四版 第二章 一切都是对象 笔记 思维导图
- java编程思想笔记-并发之CountDownLatch