JavaSE 之 ----- 对象相关基本知识总结



1. Java中通过引用操作对象,简单可理解为,若要操控电视机(Object),你不用直接操作电视机,而是通过遥控器(Reference)来间接操作电视机,如果需要到另外一个房间操控电视机,你不需要把电视机搬过去,而是拿着遥控器过去就可以了;


2. Java对象与内存分配存放的关系,一般来说,有五种地方可以存放数据:

(1). 寄存器,最快的内存地带,位于处理器内,一般Java无直接控制,程序不会直接使用到;

(2). 栈,通过栈指针得到处理器的直接支持,存放在此处的数据操作比较高效,因为可以直接通过下移栈指针来创建新的一块内存,而通过上移栈指针来释放那块内存(注:Java对象并不存放于栈中,一般栈存放基本类型变量跟对象引用);

(3). 堆,一块内存池用于存放所有的Java对象,通过new关键字创建的对象都存放于此,不同于栈,编译器不需要知道分配在堆上的这块内存存活多久,这给程序带来更多的灵活性,代价是系统需要花费更多时间来分配和清理堆内存;

(4). 常量内存(常量池),字符串字面值,基于字符串的常量等等一般存放于此,由于它们独特的安全的不变特性,它们直接嵌入在程序里(类似C&C++中的宏);

(5). 非RAM(random-access memory)内存,程序以外的数据,典型的两类,前者是流式对象,被转换为byte数组传输给其他机器,后者是持续存在的对象,例如存放于磁盘上的文件数据,数据库中的数据等等,这类对象的特征是如果需要可被转换为基于RAM的对象,一般情况又可以转换为不依赖于程序的可持续存放的对象。


3. Java中的基本数据类型(primitive types)其实是存值的特殊情况,如果需要的对象只是用来存放一些很小很简单的数值就用new来占用堆的空间,难免不够高效,所以才有了基本数据类型,而且基本数据类型变量直接持有数值,而不是引用,它们存放于栈上,以便可以更高效地使用。

每一种基本数据类型都有固定的占用空间大小,不随计算机架构等因素而变化,这也是Java的跨平台性比其他语言好的因素之一。

以下依次表示基本类型 : 占用空间大小 : (最小值 ~ 最大值) : 封装类型

boolean : Boolean(无定义大小,只允许是true或者false字面值);

char : 16bits(2bytes) : (unicode 0 ~ unicode 2 power 16 - 1) : Character

byte : 8bits(1byte) : (-128 ~ 127) : Byte

short : 16bits(2bytes) : (-2 power 15 ~ 2 power 15 - 1) : Short

int : 32bits(4bytes) : (-2 power 31 ~ 2 power 31 - 1) : Integer

long : 64bits(8bytes) : (-2 power 63 ~ 2 power 63 - 1) : Long

float : 32bits(4bytes) : IEEE754 : Float

double : 64bits(8bytes) : IEEE754 : Double

void : Void

自JavaSE 5 之后,默认提供了自动拆箱装箱的操作,即基本数据类型与封装类型可直接用操作符而非方法即可进行运算。


4. Java分别提供了BigInteger类和BigDecimal类用于进行高精度的运算,它们分别对应于整型和浮点型的运算,当然,高精度的代价就是速度。


5. 在Java中很多时候我们并不需要关心一个对象的存活期是多长,因为JVM提供垃圾回收器(garbage collector)帮助我们清理那些不再被引用的对象,然而这也是造成内存泄漏的一大主导因素,所以最好的习惯是在确定不需要使用到该对象时,将其引用变量显式赋为null,表示当前引用变量不再指向任何对象。


你可能感兴趣的:(JavaSE)