标签:
程序运行时内存的分配:
寄存器:这是最快的保存区域,与其他所有保存方式不同,它保存在处理器内部。然后,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序中找到寄存器存在的任何踪迹。
堆栈:驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生产相应的代码,以便向上和向下移动指针。这一限制影响了程序的灵活性,所以尽管Java数据要保存在堆栈中—特别是对象句柄,但Java对象并不放在其中。
堆:一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或者 “堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆来保存数据时可以得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆中自动进行数据的保存。为了达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间会花掉更长的时间。
静态存储:这里的“静态”(Static)是指“位于固定位置”(也在RAM中)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。
常数存储:常数值通畅直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。
非RAM存储:若数据完全独立于一个程序之外,则程序不运行是仍可存在,并在程序的控制范围之外。其中两个最主要的例子便是“流式对象”和“固定对象”。对于流式对象,对象会变成字节流,通常会发给另一台机器。而对于固定对象,对象保存在磁盘中。即使程序终止运行,它们仍可保持自己的状态不变。
高精度数字:
Java 1.1增加了两个类,用于进行高精度计算:BigInteger和BigDecimal。尽管它们大致可以划分为“封装器”类型,但两者都没有对应的“主类型”。这两个类都有自己特殊的方法,对应于我们针对主类型执行的操作。也就是说,能对int 或float做的事情,对BigInteger和BigDecimal一样可以做。只是必须使用方法调用,不能使用运算符。此外,由于牵涉更多,所以牺牲速度,但换来了精度。
BigInteger支持任意精度的整数。也就是说,我们可精确表示任意大小的整数值,同事运算过程中不会丢失任何信息。
BigDecimal支持任意精度的顶点数字。例如:可用它进行精确的币值计算
数组
Java数组要求所有的数组元素具有相同的数据类型。因此在同一个数组中,数组元素的数据类型是唯一的。
一但数组初始化完成,数组的内存中所占的空间将被固定下来,因此数组的长度是不可改变的。即使把数组元素清空,它所占的空间依然会保存,数组的长度不变。
Java数组既可以存储基本类型的数据,也可以存储引用类型的数据,只要所有的数组元素具有相同的数据类型
数组是一种引用类型变量,因此使用它定义一个变量时,仅仅表示定义了一个引用类型,这个引用变量还未指向任何有效的内存。因此定义数组时不能指定数组的长度。只有对数组进行初始化之后才能使用
Java中数组必须先初始化,然后才可以使用。所谓初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋值。
不能只分配内训不赋初始值,初始值有两种形式:一种由系统自动分派;一种由程序员指定;
数组初始化的两种方式:
1、静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度
2、动态初始化:初始化时程序猿只指定数组长度,由系统为数组分配初始值
不要同时使用静态初始化和动态初始化,也就是说不要在进行数组初始化时,既指出数组的长度,也为每个数组分配初始值
数组初始化完成后,就可以使用数组了,包括数组元素赋值、访问数组元素值和获取数组长度等;
foreach循环
使用foreach循环遍布数组和集合元素,无须获得数组和集合长度,无须根据索引来访问数组元素和集合元素,foreach循环自动遍历数组和集合的每个元素
标签:
原文地址:http://www.cnblogs.com/changzuidaerguai/p/4986454.html