如果我们说另一种不同的语言,那么我们就会觉得一个有些不同的世界。
—Luduing Wittgerstein(1889-1951)
1. 用引用操作对象
尽管一切都是对象,但是操纵的标识符实际上是对象的一个「引用」,可以看做成日常生活中电视机和遥控器的关系。只要拥有遥控器,就能保持着与电视机的连接,对电视声音和节目的调整,实际上都是对遥控器(引用)的操作。
String s;
这里只是创建了引用,并不是对象,如果此时想 s 发送一个消息,就会返回一个运行时错误,这是因为此时 s 实际上并没有与任何对象有联系,因此一个安全的做饭就是,创建一个引用的同时,要对其进行初始化。
String s = "Hello wolrd
但这里用到 Java 语言一个特性:字符串可以用带引号的文本初始化,通常,必须对对象采用一种更通用的初始化方法。
2. 必须由你创建所有对象
存储的位置
程序运行时,对象是怎么进行防治安排的呢?有五个不同的地方可以存储数据:
寄存器。 这是最快的存储区,因为它位于不同于替他存储区的地方–处理器内部。但是寄存器的存储数量极其有限,所以寄存器的存储根据需求进行分配,你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
堆栈。 位于通用 RAM(随机访问存储器),但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针如果向下移动,则分配新的内存,如果向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,Java 系统必须知道存储在堆栈内所有的确切的生命周期,以便上下移动堆栈指针,这也约束了程序的灵活性。
堆。一种通用的内存池(也位于 RAM),用于存储所有的 Java 对象,堆位于不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性,当需要一个对象时,只需要 new 写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配,当然,为这种灵活性必须付出相应的代价:用堆进行存储分配和清理可能比堆栈进行存储分配 需要更多的时间。
常量存储。 常量通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。
非 RAM 存储。 如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子是流对象和持久化对象。
基本类型
不同于其他的 Java 对象,创建出来的时候存储在堆中,基本类型创建并非是应用的自动变量,这个变量直接存储值,并置于堆栈中,因此更加的高效。
Java 中确定每种基本类型所占空间的大小,它们的大小并不像其他大多数语言那样所机器硬件架构的变化而变化。
基本类型 | 大小 | 最大值 | 最小值 |
---|---|---|---|
boolen | - | - | - |
char | 16-bit | Unicode 0 | Unicode 2^16-1 |
byte | 8-bit | -128 | 127 |
short | 16-bit | -2^15 | 2^15-1 |
int | 32-bit | -2^31 | 2^31-1 |
long | 64-bit | -2^63 | 2^63-1 |
float | 32-bit | IEEE754 | IEEE754 |
double | 64-bit | IEEE754 | IEEE754 |
void | - | - | - |
3. 创建新的数据类型:类
如果一切都是对象,那么是什么决定了某一类对象的外观与行为呢?通过关键字 class 创建类。
基本成员默认值
基本类型 | 默认值 |
---|---|
boolen | false |
char | ‘\u0000’(null) |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
4. static 关键字
通过 static 关键字可以满足两方面的需求:第一种,只想为特定域分哦诶单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不用创建对象。第二种,希望某个方法不与包含它的类的任何对象关联在一起,也就是说没有创建对象,也能够调用这个方法。及类数据和类方法两个概念。
5. 注释相关
基础的就不介绍了,介绍一些标签示例:
@see
@see className
@see fully-qualified-className&methodName
@link
{@link package.class#member label}
总结
通过本章的学习,接触相当多的关于如何编写一个简单程序的 Java 编程知识,此外对 Java 语言及它的一些基本思想也有了一个总体认识。