1.如果对char、byte或者short类型的数值进行移位处理,在移位之前,他们会转换成int类型,并且得到的结果也是一个int类型的值。另外,int类型最多移动2^5=32次,long最多移动2^6=64次。这样可以防止移位超过int型值所具有的位数(int是4字节32位)。(此处的翻译有比较严重歧义)
2.在java里,在一个控制表达式中,定义多个变量的能力只限于for循环适用。
3.如果已经定义了一个构造器,编译器就不会帮你自动创建默认构造器。
4.编译器做了一些幕后工作。它暗自把“所操作对象的引用”作为第一个参数传递给方法。
5.可以用this调用一个构造器,但是只允许防御构造器的最起始位置。
6.finalize()是在垃圾回收时执行的。但是问题在于一个对象的垃圾回收时机是不确定的,所以这里不能等同于析构,也最好也只做和内存回收相关或者检测性(验证终结条件,比如流是否关闭等)的操作。
7.垃圾回收器对提高了对象创建速度有明显效果。原因在于其“堆指针”移动的实现机制。分配内存就相当于移动堆指针到未分配的区域,所以效率很高。
8.引用计数常用来说明垃圾收集的工作方式,但似乎从未被应用于任何一种Java虚拟机实现中。
9.在一些更快的模式中,垃圾回收器并非基于引引用计数技术。它们依据的思想是:对任何“活”的对象,一定呢给你最终追朔到其存活再堆栈或静态存储区之中的引用。这个引用链条可能会穿过数个对象层次。由此,如果从堆栈和静态存储区开始,遍历所有的引用,就能找到所有“活”的对象。如何处理找到的存活对象,取决于不同的Java虚拟机实现。有一种做法是 停止-复制(stop-and-copy),有一种优化是再没有新垃圾产生,就会转换(自适应)成标记-清扫(mark-and-sweep)。 (停止-复制 是否就是在内存有限时所表现出来的“卡顿”?)(更多小细节见page 91,以及JVM的相关知识)
10.初始化顺序。依次是,按照声明顺序的 1.静态对象,2.静态代码块,3.非静态的全局对象,4.构造函数 5.代码块
11.数组声明时不允许指定数组大小。这和之前讲过的引用的概念有关。声明时其实是声明了引用,分配栈空间,而数组实际大小是在堆空间里,此时没有分配堆内存,所以无法确定大小。
12.Java SE5 开始支持可变参数列表,写法是 public function ( Object ... args )
第3章 操作符
3.1 更简单的打印语句
用了一个静态导入,static import,后续深入
3.2使用Java操作符
3.3优先级
3.4赋值
3.5算数操作符
3.6自动递增和递减
C++ 囧
3.7关系操作符
3.7.1测试对象的等价性
3.8逻辑操作符
3.8.1短路
3.9直接常量
直的是 1 ;2l ;3.0f 这一类
3.10按位操作符
& | ^
3.11移位操作符
<< >>,若符号为郑,则再高位插入0,若符号为负,则在高位插入1.Java中增加了一种”无符号“右移位操作符 >>>,它使用0拓展
3.12三元操作符if-else
3.13字符串操作符+和+=
3.14使用操作符常犯的错误
Java编译器已经做了一些补救
3.15类型转换操作符
强制类型转换
3.15.1截尾和舍入
理解强转的实质就会明白大部分都是截尾
3.15.2提升
主要是运算时做自动提升
3.16Java没有sizeof
3.17操作符小结
3.18 总结
第4章 控制执行流程
4.1 true和false
4.2 if-else
4.3 迭代
4.3.1 do-while
4.3.2 for
4.3.3 逗号操作符
for里面的那个
4.4 Foreach语法
Java SE5 引入
4.5 return
4.6 break和 continue
4.7 臭名昭著的goto
4.8 switch
4.9 总结
第5章 初始化与清理
5.1 用构造器确保初始化
(囧 好像很久没用过这个东东了)
5.2 方法重载
5.2.1 区分充给你在方法
5.2.2 涉及基本类型的重载
自动装箱和类型转换可能带来歧义,所以最好是带一个区别参数
5.2.3 以返回值区分重载方法
通不过编译
5.3 默认构造器
无则默认,有则无默认
5.4 this关键字
5.4.1 再构造器中调用构造器
必须写在第一行
5.4.2 static的含义
static方法就是没有this的方法
5.5 清理:终结处理和垃圾回收
finalize()做终结处理,在垃圾回收前自动执行。但是垃圾回收是有不确定性的。
5.5.1 finalize的用途何在
对象可能不被垃圾回收,垃圾回收并不等于”析构’,垃圾回收只与内存有关。
5.5.2 你必须实施清理
指引入c和c++代码的情况。Java只能引入c和c++,但是这两者可以引入其他更多的语言
5.5.3 终结条件
5.5.4 垃圾回收器如何工作
可以看一下开始写的8、9条。这里很概括。引用计数技术只是解释原理时用的,真正的JVM垃圾回收是基于"对于任何'活'的对象,一定能最终追溯到其存活在堆栈或静态存储区之中的引用"这一理念。
5.6 成员初始化
5.6.1指定初始化
5.7构造器初始化
5.7.1初始化顺序
先静态对象和静态块,然后是全局对象,然后是构造函数
5.7.2 静态数据的初始化
5.7.3 显式的静态初始化
静态块
5.7.4 非静态实例初始化
也可以用块
5.8 数组初始化
int[] a1; int[] a2 = {1,2,3}; int[] a3 = new int[3];
5.8.1 可变参数列表
function(new Object[]{1,2,3}); //老式写法
5.9 枚举类型
5.10 总结
网友评论