程序运行时,对象是怎么在内存中存储的?
1、寄存器:这是最快的存储区,他位于处理器的内部。由编译器根据需求进行分配,不能直接控制。
2、堆栈:位于通用随即访问存储器(RAM)中,通过他的堆栈指针可以从处理器那里获得直接支持。堆栈指针向下移动,则分配新的内存,若向上移动,则释放内存。java对象的引用就存放在堆栈中,java对象并不存在其中。
3、堆:也位于RAM中,用于存放所有的java对象。编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。当执行代码时,会自动在堆里进行存储分配。
4、静态存储:也在RAM中,用关键字Static来标示一个对象的特定元素是静态的。
5、常量存储:常量值存放在程序代码内部,这样做是安全的,因为他们永远不会改变,所以放在ROM(只读存储器)中。
6、非RAM存储:如果数据完全存活于程序之外,那么它可以不受程序的任何控制,例子:流对象和持久化对象。
基本类型不用new来创建变量,而是创建一个并非是引用的自动变量。这个变量拥有它自己的初始值,并置于堆栈中,因此更加有效。
基本数据类型:byte、short、int、long、float、double、boolean
高精度数字:
BigInteger: 支持任意精度的整数,在运算中,你可以准确表示任何大小的整数值。
BigDecimal:支持任何精度的定点数,可以用它进行精确的货币计算。
Java中的数组(Array):如果一个程序要访问其自身内存块之外的数组,或在数组初始化前使用内存,都会产生难以预料的后果。采用Java数组,确保数组会被初始化,而且不能再他的范围之外被访问,必须先要初始化。
对象作用域:由new创建的对象,只要你需要,就会一直保留下去。由于java中有个垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会再被引用的对象,随后,释放这些对象的内存空间,以便供其它新的对象使用。
基本成员默认值:
若类的某个成员是基本数据类型,即使没有进行初始化,Java也会确保她获得一个默认值。但确保初始化的方法并不适用于局部变量。
当你声明一个事物是static时,就意味着这个数据或方法不会与包含他的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static数据。
有些面向对象语言采用"类数据"和"类方法"2个术语,代表那些数据和方法只是为了整个类,而不是类的某个特定对象而存在的。
引用类数据和类方法可以通过类名直接引用。
1、寄存器:这是最快的存储区,他位于处理器的内部。由编译器根据需求进行分配,不能直接控制。
2、堆栈:位于通用随即访问存储器(RAM)中,通过他的堆栈指针可以从处理器那里获得直接支持。堆栈指针向下移动,则分配新的内存,若向上移动,则释放内存。java对象的引用就存放在堆栈中,java对象并不存在其中。
3、堆:也位于RAM中,用于存放所有的java对象。编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。当执行代码时,会自动在堆里进行存储分配。
4、静态存储:也在RAM中,用关键字Static来标示一个对象的特定元素是静态的。
5、常量存储:常量值存放在程序代码内部,这样做是安全的,因为他们永远不会改变,所以放在ROM(只读存储器)中。
6、非RAM存储:如果数据完全存活于程序之外,那么它可以不受程序的任何控制,例子:流对象和持久化对象。
基本类型不用new来创建变量,而是创建一个并非是引用的自动变量。这个变量拥有它自己的初始值,并置于堆栈中,因此更加有效。
基本数据类型:byte、short、int、long、float、double、boolean
高精度数字:
BigInteger: 支持任意精度的整数,在运算中,你可以准确表示任何大小的整数值。
BigDecimal:支持任何精度的定点数,可以用它进行精确的货币计算。
Java中的数组(Array):如果一个程序要访问其自身内存块之外的数组,或在数组初始化前使用内存,都会产生难以预料的后果。采用Java数组,确保数组会被初始化,而且不能再他的范围之外被访问,必须先要初始化。
对象作用域:由new创建的对象,只要你需要,就会一直保留下去。由于java中有个垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会再被引用的对象,随后,释放这些对象的内存空间,以便供其它新的对象使用。
基本成员默认值:
若类的某个成员是基本数据类型,即使没有进行初始化,Java也会确保她获得一个默认值。但确保初始化的方法并不适用于局部变量。
当你声明一个事物是static时,就意味着这个数据或方法不会与包含他的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static数据。
有些面向对象语言采用"类数据"和"类方法"2个术语,代表那些数据和方法只是为了整个类,而不是类的某个特定对象而存在的。
引用类数据和类方法可以通过类名直接引用。