(19)数据存储区域和高精度类

一,Java中的数据存储的区域
  • 在程序运行,有五个不同的地方可以存储数据:
  1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。

  2. 栈(stack)。位于通用RAM((random-access memory )随机访问在存储器)中,但通过堆栈指针可以从处理器哪里获得直接支持。栈中主要存放基本类型的变量数据和对象的引用(方法)

  3. 堆(heap)。一种通用的内存池也位于RAM区,用于存放所有的Java对象。堆不同于栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间,所以在分配空间的时候毕竟灵活,但用堆进行存储分配比用堆栈进行存储存储需要更多的时间

  • 栈的优势:存取速度比堆要快,仅次于直接位于CPU中的寄存器。缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享。
  • 堆的优势:是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。缺点:由于要在运行时动态分配内存,存取速度较慢 。
  1. 常量存储:常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。

  2. 非RAM存储:非RAM存储,如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。两个基本例子(流对象和持久化对象)

二,关于继承的笔试题
  • 初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
  • 子类继承父类时的初始化顺序:
  1. 首先初始化父类的static变量和块,它们的级别是相同的,按照代码中出现的顺序初始化

  2. 初始化子类的static变量和块,它们的级别是相同的,按照代码中出现的顺序初始化

  3. 初始化父类的普通成员变量,调用父类的构造函数

  4. 初始化子类的普通成员变量,调用子类的构造函数

三,Java中的2个高精度类

BigInteger和BigDecimal:这两个类包含的方法、提供的操作与对基本类型所能执行的操作相似,只不过是以方法调用方式取代运算符方式来实现。等于是用速度换取了精度。

BigInteger支持任意精度的整数,在运算中可以准确地表示任何大小的整数值,而不会丢失任何信息。BigDecimal支持任何精度的定点数,可以用它进行精确的货币计算。

它们都扩展Number类且实现Comparable接口,可以使用new BigInteger(String)或new BigDecimal(String)来创建实例,使用add(加),substract(减),multiple(乘),divide(除)和remainder(%)方法完成算数运算,使用compareTo方法比较两个大数字。

下一章,(20)Java中的时间操作类(Date和Calendar)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值