Variables

这本书在讲Variable的时候是从primitive和reference入手的。

书中提到Primitive variable指的是最简单的那种,包括Integer, boolean, float。而java处理String的时候有length这个instance variable所以应该是个object。

其实如果扩展一下,java包括8种primitive variable,分别是short, int, long, float, double, boolean, byte, char。

java中的char是2Bytes的,因为它使用了UTF-16 encoding。这东西叫unicode可能会包含不止一种语言,中文也有unicode,然后char范围是0~65535,包括了3000多个中文字。C的话,如果是UTF-8 encoding,就是1Byte的char。

Short = 2Bytes(16bits), Integer = 4Bytes(32bits), Long = 8Bytes(64bits)

Float = 4Bytes(32bits), Double = 8Bytes(64bits)

讨论过变量类型和他们的大小之后,开始研究他们的命名方式

1. 必须用letter, _ 或者 $ 开头
2. 不能使java reserved words 比方说你的变量不能叫int, 不能叫void, 不能叫public

研究过primitive之后,开始学习object

书中第一句话就指出,没有object variable这种东西,只有object reference variable这种东西,也就是说java除了primitive以外的variable都是pass by reference的。这个概念郭靖讲过,需要巩固一下。

Objecrt reference variable hold bits that represent a way to access an object. 这句话说得挺有道理的,应该记住。

和C++中显式的指针不一样,虽然reference variable里面实际上是个address,然而我们是不知道其具体内容的,只有JVM知道如何使用这个reference。

而对象的实体保存在哪呢?存储空间的名字叫garbage collectible heap! 所以他们都是在堆存储里的?

举个例子,myDog.bark()实际上是use the object referenced by myDog to invoke the bark() method. 这个英文说的还蛮有道理的。。。

初始化Reference Variable的方法是 Dog myDog = new Dog(); 。如此说来是不是有个事情叫做ArrayList\ myList = new ArrayList\(); 实际上是call默认构造函数,所以总需要有小括号! 因为等号左边是declare,等号右边是创建一个新的object。等号的作用就是就是把新建的object和reference连起来。

Dog myDog = new Dog()
1. Dog myDog => declare a reference variable
2. new Dog() => create an object
3. = => Link the reference variable to the object

在做array的时候可能会有一点特殊,新建一个array的方法是 int[] temp = new int[7]; 这里面array是一个object reference variable但是他并没有调用构造函数,因为什么?可能是因为人们规定好了给个[7]就相当于构造了?

results matching ""

    No results matching ""