一切都是对象
用句柄操作对象
在java中可将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“句柄”(Handle);但是拥有一个句柄,并不表示必须有一个对象同它连接:
String s;
这里只是创建一个句柄,并不是一个对象,若此时想s发送一条消息,就会获得一个错误(因为没有对象同它连接)。
所有对象都必须创建
创建句柄时,我们可以使用new来创建一个对象来同它进行连接。
保存位置
程序运行时,有六个地方可以保存数据
- 寄存器。这是最快的保存区域,位于处理器的内部;寄存器是有编译器分配,我们对此没有直接的控制权。
- 堆栈。驻留在常规RAM(随机访问存储区)区域,可以通过“堆栈直接”上下移动来操作内存(上移,释放内存,下移新建内存),速度仅此于寄存器;创建程序时,java编译器必须准确知道堆栈保存数据的“长度”和“时间”(这时因为它必须生成相应的代码,以便向上移动和向下移动指针);要注意的是java对象不放在堆栈里
- 堆。一种常规用途的内存池(也在RAM),其中保存了java对象。和堆栈相比,编译器不必知道从堆中分配多少内存和存储的数据在堆栈锁停留的时间;new的java对象都会存储在堆中
- 静态存储。存在于RAM的“固定位置”,程序运行期,静态存储的数据将随时调用;可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远不会置入静态存储空间。
- 常数存储。常数通常直接置入程序代码内部,如果有的常数需要严格保护,可以考虑将它们置入只读存储器(ROM)
- 非RAM存储。若数据独立于一个程序之外,可通过“流式对象”和“固定对象”发送给另一台机器或者存储在磁盘中。
主要类型
java中存在着四类八种的主要基本类型和一个Void类型:boolean,char,byte,short,int,long,float,double
这些类型因为需要频繁使用,会在堆栈中创建句柄并直接将值保存在堆栈中,方便高效的存取;java决定了主要类型的大小,不随机器的结构变化而变化;当然主类型也有自己相对应的“封装器”,可将对象置于堆中。
java数组
java中,创建数组时,实际创建的是一个句柄数组,而且每个句柄都会自动初始化一个特殊的值,并带有自己的关键字:null(空),就知道该句柄并未指向一个对象。正式使用前,必须为每个句柄分配一个对象,若试图访问就会报错。(也可以创建主类型数组,编译器会对其进行初始化)。
绝对不要清除对象
主类型作用域
作用域是由花括号决定的,它决定了变量的“可见性”和“存在时间”
对象作用域
java对象不具备与主类型一样的存在时间,使用new关键字创建的java对象,它会超出作用域的范围之外。
{
String s = new String("hello world!!!");
} /*作用域的终点*/
用new创建的对象的内存回收问题,有java中专门的“垃圾回收器”来进行回收(垃圾回收器会查找new创建的所有对象,并辨别其他不再被引用的对象)。
新建数据类型
类
java中使用class来定义新的对象类型
class ATypeName {}
字段和方法
在自己自定义类中可以设置两种类型元素:数据成员(字段)和成员函数(方法)
数据成员
- 数据成员是一种对象(通过它的句柄与之通信),可以是任何类型;
- 每个对象都为自己的数据成员保存存储空间,数据成员不会在对象之间共享;
- 定义类的主数据成员,java会默认分配默认值,但是“局部”变量(并非一个类的字段),则会得到一个随机值。
成员函数
- 方法决定了一个对象能够接收的消息
- 方法有返回类型、方法名、自变量列表和方法主体构成
- 调用一个类的方法,可以理解为“向对象发送消息”
- 自变量列表,可以是主类型变量也可以是任何对象类型,当是主类型变量时,调用方法时是对其值的复制;当是任何对象类型时,调用方法时是对对象的句柄复制;
- 可以返回任何类型的值,当然也可以什么都不返回(Void)
- 一个程序只是一系列对象的集合,它们的方法将其他对象作为自己的自变量使用,而且将消息发送给那些对象
简单Java程序
构建java程序的注意点
名字的可见性
java中使用反转域名的方式来区分类的名字,将其放入一个类库中
使用其他组件
java使用import
指示编译器导入一个“包”或者说一个类库,来使用其他的类。
static关键字
- java只有使用new创建对象之后,才会生成数据存储空间,并可使用相应的方法;
- static是当想用一个存储区域来保存一个特定数据–无论创建多少个对象,甚至根本不创建对象或者需要一个特殊的方法不与类的任何对象进行关联时而使用。
- 使用static关键字修饰的数据和方法都不会同那个类的任何对象进行关联;可以不在创建对象的时候使用它们。
- 因为可以在不创建对象使用static的数据和方法,所以不可简单的调用类的其他成员和方法(因为非static成员和方法必须同一个特定的对象关联在一起)
注释和嵌入文档
java中可以使用两种注释方法
- 多行注释。
/* 多行注释*/
- 单行注释。
//单行注释
注释文档
javadoc
java可以使用javadoc
来提取注释文档,生成专业的注释文档,javadoc
工具集成与jdk安装包下。
语法
所有的javadoc
命令都只能出现在“/**”
注释中,注释结束*/
;通过javadoc
可以嵌入HTML
或使用文档标记;其中文档标记是以"@"
开头的命令,至于文档注释行的起始处。
类文档标记
- @version 版本号
- @author 作者信息
- @see
- 嵌入HTML
变量文档标记
只能是嵌入HTML和@see
方法文档标记
- @param 参数名 说明
- @return 说明
- @exception 完整类名 说明
- @deprecated 废弃方法