《thinking in JAVA》读书笔记 (二)

时间:2021-07-17 17:56:28

对象与引用

一切被视为对象。操纵的标识符实际上是对象的一个“引用”;
基本类型的变量没有被视作对象。但我认为它们应该与类类型得到相同的待遇。
JAVA的操作符更像是对象的指针。书上了花了大段来说明为什么是引用不是指针,但还是不理解。

你拥有一个引用,并不需要有一个对象与之关联。
使用之前关联上对象就可以,不一定要在声明的时候。


创建对象

基本类型不用new不创建,也不是创建引用。而是创建“自动”变量,直接存储值并置于栈中。
字符串不属于基本类型,但可以像使用基本类型一样的方法申请字符串对象。如

String s1 = "asdf";
String s2 = new String("asfd");

通常基本类型用第一种,其它都要用第二种。


对象存放

基本类型置于堆中。
对象引用一般放在栈中,对象都放在堆中。


基本类型

基本类型所占的存储空间大小不变。
所有数值类型都有正负号。
boolean类型所占存储空间的大小没有明确指定。(也没有sizeof()这样的函数去计算。
基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。例如:

char c = 'x';
Character ch = new Character('x');

数组

JAVA确保数组会被初始化,而且不能在它的范围之外被访问。
数组标识符本身是个引用。
如果是基本类型数组,数组内容是值,初始化为0。
如果是对象数组,数组内容是对象,初始化为null,使用前需要关联对象。


作用域

当两个不同作用域的变量名冲突。C/C++会隐藏较大作用域的变量,JAVA会报错。例如:

{
int x = 12;
{
int x = 96;
}
}

基本类型的初始化

类中的成员是基本类型,申请对象是成员会得到默认值。
“局部”变量基本成员,不会默认初始化。
类中的基本成员在堆中,开辟堆空间时会二进制清零。
“局部”变量基本成员在栈中,开辟栈空间时不会清零,为随机值。


方法

JAVA的方法必须是类的一部分。
JAVA消除了“前向引用”(先声明再引用)。


static

类中的static成员,意味着这个成员不会与类的任何对象实例关联到一起。(与C++同。)
static方法常常拿来作“牧羊人”的角色,负责看护与其隶属同一类型的实例群。


类名与文件名

一个文件中最多有一个public类,这个类必须与文件同名,包括大小写。
也可以没有一个public类,这时文件名任意。


javadoc

JAVA特有的东西,完全不懂,内容太多,不记了。