Java 中几乎一切都是对象。
2.1 用引用操纵对象
对象(这里理解为变量)可以怎样操纵?
- 直接操纵。
- 间接操纵: C 中的指针,C++ 中的引用。
Java 的做法是使用 “引用”,应该注意这和 C++ 的引用是不同的,但是不同之处不必理解。
String s;
这条语句就建立了一个引用,但是并没有建立对象。此时如果对 s 发出消息,就会出现运行错误(权:其实更可能出现的是编译错误,错误是操纵可能没有初始化的变量;如果出现异常则是 java.lang.NullPointerException)。
2.2 由你创建对象
new String("hello");
创建一个 String 对象,返回这个对象的引用。
Java 可以在五个位置存储数据。
- 寄存器
位于 CPU 内部,数量非常有限。不被用户控制(C/C++ 中可以建议使用寄存器,Java 中没有这个机制)。 - 堆栈
通用 RAM 中,通过堆栈指针从 CPU 处得到支持。结构确实是栈这个数据结构,所以逻辑上每个创建的数据,必须要确切知道这个变量销毁的时机。Java 的引用存储在堆栈中,但是对象不存在这里。 - 堆
通用内存池,也位于 RAM 区域。编译器不需要知道数据的生存期。堆的内存创建和清理需要更多的时间。 - 常量储存
常量往往存储在代码内部。也有时候会将常量和其他变量存在 ROM 中,例如嵌入式中的存储和字符串池。 - 非 RAM 储存
独立于程序之外的数据。在程序没有运行的时候也可以存在。例如流对象和持久化对象。
特例:存储在堆中的“对象”
new 创建对象存储在堆中,有不少时间消耗,如果这个对象很小,这个代价就显得很高。
对于 boolean
char
byte
short
int
long
float
double
void
,不用 new 创建数据,存储在堆栈中,称作基本类型。
Java 中基本类型的大小不随着硬件架构变化,导致 Java 具有更好的移植性。
基本类型可以在堆中创建一个非基本对象,对应的是 Boolean
Character
Byte
Short
Integer
Long
Float
Double
Void
。为什么要这样做呢?且听以后分解。
Java 中的数组
C 和 C++ 中使用数组是危险的。
- Java 确保数组会初始化。
- Java 确保数组不会访问越界。
- 代价是一点内存开销和运行时的下标检查。
Java 数组的创建在对象数组和基本类型数组中做法是不一样的。
- 对象数组
Java 会创建一个引用数组。每个引用都是 null。 - 基本类型的数组
Java 会将内存全部清零。
2.3 永远不需要销毁对象
{
int x = 12;
{
int x = 13; // Java 中不允许,C/C++ 中允许
}
}
超出作用域(scope)的对象,他的引用被销毁,但是本身还放在堆中。当一个对象的所用引用都被销毁,则对象的内存会在合适的时候被 Java 垃圾回收机制回收。
2.4 创建新的数据类型:类
class ClassName {}
声明一个类。类内部主要是字段和方法。其中的基本类型默认初始化为零(在创建对象的时候)。
如果在方法中定义了 int x;
x 默认值不一定是零,但是无所谓是多少,因为未初始化的 x 是不允许使用的(而 C/C++ 允许使用)。
2.5 方法、参数和返回值
C/C++ 中函数(function)在 Java 中称作是方法(method)。
ReturnType methodName( /* Argument list */ ) {
/* Method body */
}
参数列表
参数列表对于非基本类型,传递的是引用。
2.6 构建一个 Java 程序
名字可见性
C 中名字冲突尤为严重。C++ 使用类的概念部分解决这个问题,但是还是允许全局变量,所以使用名字空间解决这个问题。Java 不允许类外代码,并使用包组织类。很好的解决了这个问题。
运用其他构件
构件就是指类。在同一文件中声明的多个类可以相互使用,没有声明先后问题。
使用 import
来声明要使用的构件。import 可以使用通配符,引入一个包中的所有类,例如 import java.util.*;
。
static 关键字
使用 static
声明类方法和类数据。这些可以被类和对象操纵,数据在类声明时初始化,仅有一份拷贝。
你的第一个 Java 程序
略
注释和嵌入式文档
略
编码风格
Java 有编码规定,具有确定的推荐风格。
- 类名单词首字母大写,不使用下划线。
ClassName
- 方法和变量名除了第一个单词全部小写其他单词首字母大写。
int methodName(int firstInteger, int secondInteger);
- 包名小写。
java.util.*
- 左大括号放在行尾。
总结
略。