Java学习(1)
对象
Java中(几乎)一切都是对象。尽管一切都是对象,但操纵的标识符实际上是对象的一个“引用”。 此外,即使没有引用,对象也可独立存在。也就是说,你拥有一个引用,并不一定需要有一个对象与它关联。因此,若想操纵一个词或句子,则可以创建一个String引用:String s;但 这里创建的只是引用,并不是对象。如果此时向s发送一个消息,就会返回一个运行时错误。这是因为此时s实际上没有与任何事物相关联(即没有引用)。因此,一种安全的做法是:创建一个引用的同时便进行初始化。String s=“asdf”;这里用到了Java语言的一个特性:字符串可以用带引号的文本初始化。 一旦创建了一个引用,就希望它能与一个新的对象相关联。通常用new操作符来实现这一目的。new关键字的意思是”给我一个新对象”。所以前面的例子可以写成:String s=new String(”asdf”);它不仅表示”给我一个新的字符串。”而且通过提供一个初始字符串,给出了怎样产生这个String的信息。
存储数据区域
1)寄存器。这是最快的存储区,它位于处理器内部,其数量极其有限,所以会根据需求进行分配,不能直接控制。
2)堆栈。位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效的分配存储的方法,仅次于寄存器。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束限制了程序的灵活性。对象引用存储于堆栈中,Java对象存储于堆中。
3)堆。一种通用的内存池,用于存放所有的Java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。但是用堆进行存储分配和清理可能比用堆栈进行存储分配需要更多的时间。当需要一个对象时,只需new一行代码,执行这行代码时会自动在堆里进行存储分配。
4)常量存储。常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。
5)非RAM存储。若数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。如流对象和持久化对象。在流对象中,对象转化成字节流,通常被发送给另一台机器。在持久化对象中,对象被存放于磁盘上,因此,即使程序终止,它们仍可以保持自己的状态。这种存储方式的技巧在于:把对象转化成可以存放在其他媒介上的事物,在需要时,可恢复成常规的、基于RAM的对象。
基本类型
基本类型特殊对待,是因为new将对象存储在”堆”里,故用new创建一个对象–特别是小的、简单的变量,往往不是很有效。Java中不用new来创建变量,而是创建一个并非是引用的”自动”变量。这个变量直接存储”值”并置于堆栈中,因此更加高效。
Java的基本类型所占存储空间的大小具有不变性。boolean类型所占存储空间的大小没有明确指定,仅定义为能够取字面值true或false。基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。
高精度数字
Java提供了两个用于高精度计算的类:BigInteger和BigDecimal。 BigInteger支持任意精度的整数。BigDecimal支持任何精度的定点数。