这是Java编程思想读书笔记的第二篇,下面是主要内容。
- Java和C++都是杂合/混合型语言,但是相比之下,Java是一种更纯粹的面向对象程序设计语言
- 对象与引用:操纵对象的标识符实际上是对象的一个引用;有引用,不一定有对象与它相关联,比如String s
- 程序运行时,有5个不同的地方可以存储数据:
- 寄存器:C和C++允许程序猿向编译器建议寄存器的分配方式
- 堆栈:创建程序时,Java系统必须知道堆栈内所有项的确切生命周期,以上下移动指针;故灵活性较差
- 堆:Java对象存储区域,分配和释放资源较慢,但是灵活性高
- 常量存储:常量值通常直接存放在程序代码内部
- 非RAM存储:如果数据完全存活于程序之外,在程序没有运行时也可以存在。两个基本例子是流对象和持久化对象。流对象,对象转化成字节流,通常发送给另一台机器;持久化对象,对象被存放于磁盘上。
- Java当中有一系列经常用到的类型,所以它们被区别对待,称为“基本类型”。不通过new来创建变量,而是创建一个并非是引用的自动变量。这个变量直接存储值,存放在堆栈中,而不是堆。
- Java基本类型存储空间大小的不变性
- 高精度数字:BigInteger和BigDecimal
- Java是一种自由格式(free-form)的语言,所以空格、换行符都不会影响程序的执行结果
- 当变量作为类的成员时,Java才确保给定其默认值,以确保那些是基本数据类型的成员变量得到初始化
- Java采用了一种全新的方法来避免名字冲突的问题,即程序猿使用自己的Internet域名(即包名)
- Java消除了所谓的“向前引用”问题,即即使一个类在文件后面才被定义,也可以使用这个类(原来还有这么一个说法,向前引用)
- static方法常常用来做“牧羊人”的角色,负责看护与其属于同一类型的实例群
- javadoc实现了文档与代码的链接,是用于提取代码注释的工具。它采用了Java编译器的某些技术,查找程序内的特殊注释标签。它不仅解析由这些标签标记的信息,也将毗邻这些注释的类名或方法名抽取出来
- 静态导入:import static ***
- 通过在创建Random对象时提供种子(用于随机数生成器的初始化值,随机数生成器对于特定的种子值总是产生相同的随机数序列),就可以在每一次执行过程中生成相同的随机数
- 一元加号的作用仅仅是将较小类型的操作数提升为int ???
- 前缀递增递减是先计算,后产生值;后缀递增递减是先产生值,后计算
- equals方法的默认行为是比较对象的引用。所以在我们自己定义的类当中,除非我们覆盖此方法,否则自定义类调用equals方法比较的就是引用,而不是值
- 如果在应该用String的地方使用了布尔值,布尔值会自动转化成合适的文本形式
- 指数计数法,1.49e-43f(e或者E都一样),f表示是float,默认是double
- 我们将布尔类型作为一种单比特值对待
- 移位操作符:左移位操作符<<,有符号右移位操作符>>,无符号右移位操作符>>>
- 移位可与等号组合使用,但在使用无符号右移位结合赋值操作时,可能会遇到一个问题:如果对byte或short值进行这样的移位运算,得到的可能不是正确的结果。它们会先被转换成int类型,再进行右移操作,然后被截断,赋值给原来的类型,在这种情况下可能得到-1的结果(P50页)??
答:因为截断以后所取部分都是1,所以会返回-1。实例代码如下:
- 三元操作符:boolean-exp? value0: value1;
- 窄化转换(narrowing conversion)和宽化转换(widening conversion)。布尔型不允许进行任何类型的转换处理
- 在将float或者double转为int时,总是执行截尾;要想得到舍入的结果,则需要使用java.lang.Math中的round()方法
- 对基本数据类型执行算术运算或按位运算,只要类型比int小,这些值会自动转换成int
以上就是第二章和第三章的读书笔记,如果有错误的地方或者理解不对的地方,欢迎指出。