第二章 一切都是对象
本章介绍Java程序的基本组成部分。
2.1 用引用操纵对象
操纵对象的标识符就是引用。例如:
String str = “asdf”;
2.2 必须由你创建所有对象
存储区域的分类:
1) 寄存器
最快的存储区,位于处理器内部,但数量有限,且不能直接控制。
2) 堆栈
位于通用RAM(随机访问存储)中,堆栈指针向下移动,则分配新的内存,向上移动则释放内存,仅次于寄存器,存储Java程序的对象引用,但不存储Java对象。创建程序时,Java系统必须明确知道存储在该区域所有项的确切生命周期
3) 堆
位于RAM区,是一种通用的内存池,用于存储所有的Java对象。与堆栈不同的是,无需知道存储的数据在堆内的存活时间。
4) 常量存储
常量值通常直接存放在程序代码内部
5) 非RAM存储
数据完全存活于程序之外,不受程序控制,典型的例子是流对象和持久化对象。这种存储方式在于,把对象转化成可以存放在其他媒介上的事物,在需要时,可以恢复成常规的、基于RAM的对象。
基本类型(无需new来创建变量)
基本类型 | 大小 | 最小值 | 最大值 | 包装器类型 |
---|---|---|---|---|
boolean | - | - | - | Boolean |
char | 16-bit | Uincode 0 | Uicode 2^16-1 | Character |
byte | 8 bits | -128 | +127 | Byte |
short | 16 bits | -2^15 | +2^15-1 | Short |
int | 32 bits | -2^31 | +2^31-1 | Integer |
long | 64 bits | -2^63 | +2^63-1 | Long |
float | 32 bits | IEEE754 | IEEE754 | Float |
double | 64 bits | IEEE754 | IEEE754 | Double |
void | - | - | - | void |
java SE5后的自动包装功能能自动地将基本类型和对应的包装类型互相转换。
高精度数字
BigInteger和BigDecimal,前者用于任意位数的整数,后者用于任意精度的数字的计算。
Java中的数组
与C和C++不同,Java中的数据会被初始化,并且不能在它的范围之外被访问(即数组下标不能越界)。
2.3 永远不需要销毁对象
2.3.1 作用域
作用域决定其内定义的变量名的可见性和生命周期,其由花括号决定。
2.3.2 对象的作用域
Java对象不具备和基本数据类型一样的生命周期。当使用new关键字新建对象时,该对象可以存活于作用域之外。
{
String str = new String("a string");
}
当引用s在作用域终点消失时,String对象并没有消失,依然占据内存空间,它最终的销毁是由Java中"垃圾回收机制"来完成。
2.4 创建新的数据类型:类
类中包含两种元素:字段(数据成员)和方法(成员方法)。
class ATypeName{
/* Class body goes here */
}
2.5 方法、参数和返回值
调用方法就是向对象发送消息。
ReturnType methodName(/* Argument list */){
/* Method body */
}
参数类型为基本数据类型,则传递的是引用;参数类型为对象数据类型,则传递的是对象。
2.6 构建一个Java程序
名字可见性
包名:域名反转,小写。
运用其他构建
使用关键字import导包。
static关键字
当声明一个事物为static时,意味着这个域或者方法不会与包含它的那个类的任何实例对象关联。
2.7 你的第一个Java程序
import java.util.Date;
public class HelloDate {
public static void main(String[] args){
System.out.println("Hello, it's: ");
System.out.println(new Date());
}
}
编译javac HelloDate.java,运行java HelloDate。
2.8 注释和嵌入式文档
注释
单行注释://
多行注释:/*
...
*/
嵌入式文档
javadoc:/**
...(使用HTML或者文档标签)
*/
可在类、字段和方法上使用
嵌入式HTML
/**
* You can <em>even</em> insert a list:
* <ol>
* <li>Item one</li>
* <li>Item two</li>
* <li>Item three</li>
* </ol>
*/
不要使用标题标签,如<h1>或<hr>等。
所有类型的注释文档(类、字段和方法)都支持嵌入式HTML。
标签
1. @see: 引用其他类
该标签格式如下:
@see classname
@see fully-qualified-classname
@see fully-qualified-classname#methodname
2. {@link package.class#method label}
与@see类似,但只用于行内。
3. {@docRoot}
产生到文档根目录的相对路径。
4. {@inheritDoc}
该标签从当前的类的最直接基类继承相关文档到当前的注释文档中。
5. @version
该标签格式如下:
@version version-information
6. @author
该标签格式如下:
@author author-information
7. @since
该标签允许指定程序代码最早使用版本。
8. @param
该标签用于方法文档中,方法的每一个参数都有一个这样的标签,其格式为
@param parameter-name description
9. @return
该标签用于方法文档,其格式为:
@return description
10. @throws
该标签用于方法文档,其格式为:
@throws fully-qualified-class-name description
11. @deprecated
该标签用于指出一些旧特性已被新特性取代,建议用户不要再使用这些旧特性。
2.9 编码风格
类名:每个单词首字母大写
包名:域名反转,全部小写
其余:驼峰风格,一个单词全部小写,后面单词首字母大写。