2.1 用引用操纵对象
操作的标识符是对象的一个引用,而不代表对象本身。
2.2 必须由你创建所有对象
一旦创建了一个引用,就希望它能与一个新的对象相关联。通常用new关键字来实现这个目的,意思就是“给我一个新对象”。
2.2.1 存储到什么地方
寄存器:最快的存储区,位于CPU内部。因为数量有限,要按需分配,程序员感受不到。
堆栈:位于RAM中,但是通过堆栈指针可以从处理器哪里获得直接支持。堆栈指针向下移动,则分配新的内存;若向上移动,则释放这些内存。一般是存放对象引用,约束:创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便移动堆栈指针。
堆:一种通用的内存池,也位于RAM区,用于存放所有的Java对象。堆不同于栈的好处:编译器不需要知道存储的数据在堆内存活多长时间,因此堆内存分配有很大的灵活性。
常亮存储:常量值通常直接存放在代码内部,因为永远不会改变。
非RAM存储:如果数据完全存活在程序之外,那么它可以不受程序的任何控制,在程序没有运行的时候它也可以存在,如流对象和持久化对象。
【注意】基本类型、对象引用存放在堆栈中,对象本身放在堆中。String是一个不变的常量,放在常量池中。如果是new出来的String对象放在堆中,它的引用是在栈中。
2.2.2 特别基本类型
基本类型:为了提高效率,不用new来创建,而是创建一个并非是“引用”。这个变量直接存储值,并且置于堆栈中。
基本数据类型大小最小值最大值包装器类型
boolean---Boolean
cahr16bitUnicode0Unicode2^16-1Character
byte8bit-128+127Byte
short16bits-2^15+2^15-1Short
int32bits-2^31+2^15-1Interger
long64bits-2^63+2^63-1Long
float32bitsIEEE754IEEE754Double
double64bitsIEEE754IEEE754Double
所有数值类型都有正负号。
基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型、
构造方法:
char c = 'x';
Character ch = new Character(c);
也可以这样:
Character ch = new Character(‘'x');
JDK1.5后有自动装箱拆箱功能
Character ch = 'x'; 或 char c = ch;
Java提供了两个高精度的类:BigInteger和BigDecimal,他们大体上是属于包装类的范畴,但是没有对应的基本类型。
2.2.3 Java中的数组
Java可以确保数组会被初始化,而且不会在他的访问范围之外被访问。
当数组存放基本数据类型的时候,全部初始化为0。
当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定的值,该值拥有一个自己的关键字null。一旦编译器看见null,就知道这个引用还没有指向某个对象。在使用任何引用之前,必须为其指定一个对象;如果试图使用一个还是null的引用,在运行时会报错。
2.3 永远不需要销毁对象
2.3.1作用域
由大括号决定,决定了在其内定义的变量名的可见性和生命周期。在作用域内定义的变量只可用于作用域结束之前。Java中不存在C++的作用域覆盖的情况。
2.3.2 对象的作用域
Java对象的生命周期和基本数据类型的不一样。当用new创建一个新的对象时,它可以存活于它的创建所在的作用域之外。
{
String s = new String("Hello");
}
引用s在作用域终点就消失了。然而,s指向的String对象仍继续占据内存空间。所以Java有一个垃圾回收器,用来监视new创建的所有对象,并辨别那些不怎么被引用的对象。然后将其释放掉。
2.4 创建新的数据类型:类
2.4.1 字段和方法
类中可以设置两种类型的元素:字段(数据成员)和方法(成员函数)
字段可以是基本数据类型,也可以是任何类型的对象,通过其引用和其进行通信,必须要初始化该引用,以便使其与一个实际的对象相关联。
每个对象都有用来存储其字段的空间,普通字段不能在对象间共享。
使用 . 来引用对象成员,如data.i = 10;
基本成员默认值
若类的某个成员是基本数据类型,即使没有进行初始化,Java也会给它默认值,这种默认只针对类的字段。(boolean是false,其他是0)
2.5 方法、参数和返回值
方法就是函数。它的基本组成方式:名称、参数、返回值和方法体。
Java中的方法只能作为类的一部分来创建。
调用方法的行为称作发送消息给对象。
2.5.1 参数列表
方法的参数列表是指要传递什么信息给方法。
return关键字表示做完了要离开这个方法了,带上要返回的结果。
2.6 构建一个Java程序
2.6.1 名字可见性
引入包名,反写域名。
2.6.2 运用其他构件
import关键字
2.6.3 static关键字
用new来创建对象的时候,数据存储空间才会被分配,其方法才供外界调用。通过static关键字可以不用创建对象而调用方法。
当声明一个事物是static时,意味着它不会与它所在的类的任何对象关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域。
也就是说,为什么非得创建一个对象,才能使用方法和字段。因为非static域的字段和方法都是和特定的对象绑定的。如果你想不创建对象,直接使用方法和字段,就设定static,这样没有和特定对象绑定,直接用就好了,不用创建对象。
使用: 直接类名+方法名即可。
2.7 第一个Java程序
java.lang包是默认导入到每个类文件中的,他的所有类都是可以直接被使用的。
2.8 注释和嵌入文档
介绍一些常用的javadoc标签:
1.@see:引用其他类:在生产的HTML文件中,可以通过这个标签链接到其他文档。
2.{@link package.class#memeber label} :与@see相似
3.{@docRoot} :产生到文件根目录的相对路径。
4.@version : 存放版本信息
5.@author :作者
6.@since: 允许指定程序代码最早使用版本。
7.@Param :是用来描述方法中参数列表。
8.@return :描述返回值的含义
9.@throws :调用失败后抛出的对象。
10.@Deprecated :弃用的意思。指出一些旧特性被新特性取代,不要使用这些特性,可能会被删除。
2.9 编码风格
类名的首字母大写。使用驼峰风格。
方法、变量名等地一个字母小写。