尽管Java是基于C++的,但是相比之下,Java是一种更“纯粹”的面向对象程序设计语言。

2.1 用引用操纵对象

用遥控器(引用)来操纵电视机(对象)。只要握住这个遥控器,就能保持与电视机的连接。
即使没有电视机,遥控器亦可独立存在。也就是说,你拥有一个引用,并不一定需要有一个对象与它关联。
为避免空指针等运行时错误,一种安全的做法是:创建一个引用的同时便进行初始化。

2.2 必须由你创建所有对象
String s = new String("abcd");——new关键字的意思是“给我一个新对象”。
存储到什么地方

  • 寄存器:位于CPU内部,它们根据需求进行分配,你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
  • 堆栈:位于通用RAM(随机访问存储器),Java的对象引用存储于堆栈中。
  • 堆:一种通用的内存池(也位于RAM区),用于存放所有的Java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。
  • 常量存储:常量值通常直接存放在程序代码内部。
  • 非RAM存储:把对象转化成可以存放在其他媒介的事物,在需要时,可恢复成常规的、基于RAM的对象。例如流对象、持久化对象。

特例:基本类型
对于Java的基本类型,不用new来创建变量,而是创建一个并是引用的“自动”变量。这个变量直接存储“值”,并置于堆栈中。
BigInteger:支持任意精度的整数。
BigDecimal:支持任意精度的定点数。
Java中的数组
Java的主要目标之一是安全。Java确保数组会被初始化,而且不能在它的范围之外访问。这种范围检查,是以每个数组上少量的内存开销及运行时的下标检查为代价的。

2.3 永远不需要销毁对象
作用域
作用域决定了在其内定义的变量名的可见性和生命周期。
在C、C++和Java中,作用域由花括号的位置决定。
对象的作用域
当用new创建一个Java对象时,它可以存活于作用域之外。由new创建的对象,只要你需要,就会一直保留下去。
Java有一个“垃圾回收器”,用来监视用new创建的所有对象,并辨别哪些不会再被引用的对象。随后释放这些对象的内存,以便供其他新的对象使用。

2.4 创建新的数据类型:类
一旦定义了一个类,就可以在类中设置两种类型的元素:字段和方法。
在Java中,你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象。
若类的某个成员是基于基本数据类型,即使没有进行初始化,Java也会确保它获得一个默认值。

2.5 方法、参数和返回值
方法:类似于C中的函数,在Java中表示“做某些事情的方式”。
Java的方法决定了一个对象能够接受什么样的消息。
方法的基本组成部分包括:方法名称,参数列表和方法体。
方法名和参数列表合起来可唯一地标识出某个方法。
方法的参数列表指定要传递给方法什么样的信息。
返回值是通过return关键字实现的。return关键字的用法包括两个方面:首先,它代表“已经做完,离开此方法”;其次,如果此方法产生了一个值,这个值要放在return语句后面。
程序似乎只是一系列带有方法的对象组合,这些方法以其他对象为参数,并发送消息给其他对象。

2.6 构建一个Java程序
名字可见性
程序往往包含许多难以管理的名字。Java采用了一种全新的方法来避免这些问题。Java使用“包”来管理大型名字空间,对应于文件系统的目录管理。
运用其他的类
如果想在自己的程序中使用预先定义好的类,那么编译器就必须知道怎么来定位它们。为实现这个目的,可以使用关键字import来准确地告诉编译器你想要的类是什么。
static关键字
当声明一个事物是static时,就意味着这个域或者方法不会与包含它的那个类的任何对象实例关联在一起。
引用static变量的两种方法:使用类名(首选),通过一个对象去定位。
一个static字段对每个类来说都只有一份存储空间,而非static字段则是对每个对象有一个存储空间。

2.7 你的第一个Java程序
//: org/fahai/charpter2/HelloDate.java
package org.fahai.charpter2;

import java.util.Date;
public class HelloDate {
     public static void main(String[] args) {
          System.out.println("Hello, it's: ");
          System.out.println(new Date());
     }
}
main()方法的参数是一个String对象数组。在这个程序中并未用到args,但是Java编译器要求必须这样做,因为args要用来存储命令行参数。

2.8 注释和嵌入式文档
两种注释风格:块注释和单行注释。
javadoc是用于提取注释的工具,可生成良好的程序文档。
注释应位于定义之前。
《Java编程思想》这本书中的一些注释惯例:
用一个":"作为特殊记号说明这是包含源文件名的注释行,该行包含文件的路径信息,随后是文件名。
"///:~"标志源代码清单的结束。
"/*Output "标签表示输出开始部分将由这个文件生成,通过这种形式,它会被自动地测试以验证其准确性。

2.9 编码风格
类名的首字母要大写,多个单词构成的时候采用“驼峰风格”。