《Thinking in Java》读书笔记

类别:Java 点击:0 评论:0 推荐:
Thinking in Java应该是一本伟大的书了,不但在于其特别的发布形式(作者非常自信,也颇具爱心,有大知识分子的胸怀和气度),更在于书本内容的深度和意义以及随着而来的影响力。去年曾经读过,粗粗的看了前面的将近十章。刚读时感觉很有味道,很有深度,后来就有点力不从心了,关键是me当时对java还是一知半解,最后就把它搁下了。做短信提取的程序所碰到的基础的问题让me深思:了了然的东西是不是太多了?对java真的能熟练应用了吗?不是指的语法和新功能,那些靠阅读docs可以基本掌握用法,而是在于对java本身基本概念、机能的理解把握不够!一个小小的byte到int的转换都把me搞的人仰马翻,也太……虽然通过复习《java语言定义说明》解决了这个问题,但对java没有全面掌握,特别是没有系统概念的缺陷暴露无遗。翻阅“白氏书屋”,me又看到了这个《Thinking in Java》,这个已经是第三版。从preface和Introduction中可以看出大约是2002年年底出的,当时已经有c#和.NET了。
 《Thinking in Java》阅读笔记。摘录重点以及me不甚了了的知识点,特别是后者。尽量拷贝原文,me的译文用◇◇标记,自己的理解用★★标记。
 
 It’s useful to visualize some aspects of how things are laid out while the program is running—in particular how memory is arranged. There are six different places to store data:
 ◇对程序运行中一些东西是如何分布的(实际上就是如何分配管理内存)有个可视化轮廓是非常有用的。共有六个地方可以存放数据:◇
 1、Registers。◇寄存器。速度最快,在处理器内部。但用户不能直接控制。◇
 2、The stack。◇栈。速度和效率都很高,仅次于寄存器。存放在RAM中,由处理通过栈指针控制。存放对象的索引(reference)。编译器需要事先知道大小以便控制使用。◇
 3、The heap。◇堆。存放在RAM中。主要存储对象。因为要寻址定位对象,效率稍低。◇
 4、Static storage。◇静态存储区。也存放在RAM中,但位置在整个程序运行期不会改变。对象的成员可以声明为静态的,但对象不成。◇
 5、Constant storage。◇常量存储区。在嵌入系统中甚至可以事先存储在ROM中。◇
 6、Non_RAM storage 。◇非RAM存储区。可以完全独立于程序控制之外存在。典型的基本示例是streamed objects、persistent objects,前者可以在程序运行中以流的形式传输到另外的机器,后者可以存储在硬盘上,程序下次运行的时候再读到内存中。◇
 
 基本类型
 ◇处于效率的考虑java保留了基本类型,因为每个都声明为对象开销太大。boolean、char、byte、short、int、long、float、double,每个都有对应的封装对象如Integer。另外为了提高计算精度,还提供了两个特别的类BigInteger和BigDecimal。每个基本类型占用内存字节数都是固定的,整个处于可移植性的考虑。◇
 队列
 ◇声明的队列如果指向某个对象,全部初始化为null;如果声明了基本类型的数列,编译器自动初始化为0,boolean为false。◇
 不需要人为的销毁对象
 ◇scope的概念。垃圾搜集器自动管理通过new语句生成的对象,如果已经在视野之外没有地方对它进行引用就自动销毁它。这种机制避免了传统编程中的内存泄漏问题(memory leak)。◇
 基本类型成员的默认值
 ◇类中的基本类型成员默认值为0,其中boolean则为false。主要是为了类中成员未初始化而引发的异常错误。但是声明在方法中的变量不会自动初始化。◇
 Embedded HTML
Javadoc passes HTML commands through to the generated HTML document. This allows you full use of HTML; however, the primary motive is to let you format code, such as:
/**
* <pre>
* System.out.println(new Date());
* </pre>
*/

本文地址:http://com.8s8s.com/it/it12811.htm