on java读书笔记

第三章:对象无处不在
c++和java都是混合型语言(允许采用多种编程风格)
java语言预期你只编写面向对象程序(但是现实开发都是用mvc这种贫血模式),本章主要的目的是为了认识java中的(几乎)一切都是对象这个事实;
3.1
1.所有的编程语句都在内存中处理各种元素。
java 使用统一的语法,通过引用(reference)来操作内存对象。
这种说法有点像c的指针。但是这种引用机制是没有像指针一样的底层实现的。
2.引用这种命名方式在有些程序员看来是有问题的。因为java是不支持引用传递的,具体是通过值来传递对象的引用。
3.String s; 这用写法不安全, 如果 现在 你 向 对象 s 发送 信息, 则 会 得到 一条 报错 消息, 因为 s 还没有 连接 到任 何 对象.
比较正确的写法:String s = “”;
而对 于 其他 类型 的 对象 而言, 你 需要 使用 一种 更为 通用 的 初始化 方式。
String s = new String(" asdf");
3.2
数据存储最快的硬件设施是寄存器,但是java没有直接操作寄存器的api,而在c和c++中可以向编译器申请分配寄存器。
3.3.1
栈:处理器可以通过栈指针直接操作RMA里的数据。具体来说就是,栈指针向下移动将申请一块新的内存,向上移动则会释放该内存,这是一种极其高效的内存分配方式,其效率仅次于寄存器,只不过 Java 系统 在 创建 应用 程序 时 就必须 明确 栈 上 所有 对象 的 生命 周期。 这种 限制 约束 了 程序 的 灵活性, 因此 虽然 有 一些 数据 会 保 存在 栈 上( 尤其是 对象 引用), 对象 本身 却 并非如此。

堆:编译器 并不 关心 位于 堆 上 的 对象 需要 存在 多久。所以他的使用是非常灵活的。但是这种灵活是有代价的:分配和清理堆存储要比栈存储发费更多时间(c++可以在栈上创建对象)。不过java的堆内存分配机制现在已经非常高效了,我们不需要为此类问题担心。

常量 存储( constant storage)。 常量 通常 会 直接 保存 在 程序 代码 中, 因为 它们 的 值 不会 改变, 所以 这样做 是 安全 的。 有时候 常量 会 与其 他 代码 隔离 开来, 于是 在某 些 嵌入 系统 里, 这些 常量 就可以 保存 在 只读 存储器(ROM)。

非RAM存储:如果数据不保存在应用程序里, 那么 该 数据 的 生命 周期 既不 依赖于 应用 程序 是否 运行, 也不 受 应用 程序 的 管制。
比较典型的例子有“序列化对象”,它指的是转换为字节流(序列化,可以发送到其它机器的对象)。
还有一种是持久化对象(保存在磁盘上的对象),它可以将对象转换成其它形式以保存到其它媒体中,然后在程序需要使用的时候转换成常规的RAM对象。
Java 支持 轻量级 的 持久 化 对象 存储, 而 JDBC 以及 Hibernate 等 库 则 提供 了 更为 成熟 的 解决 方案, 即 支持 使用 数据库 存取 对象 信息。

3.2.2 基本数据类型
基本数据类型可以在栈上直接创建对象,这相比于new在堆上创建对象来说更加高效。
所以int a = 1;中的a不是一个引用,它直接表示一个“自动变量”。因为要在栈上直接分配对象内存,所以它的内存大小是固定的。

java基本数据类型内存大小图,该图截取自on java
基本数据类型还有对应的包装类,存储在堆中,提供里:自动装箱机制。将基本数据类型和包装类型实现自如转换。
Character ch = ‘x’;
char c = ch;

高精度数字:BigInteger和BigDecimal.
BigInteger可以支持任意精度的整数
BigDecimal可以支持任意精度的点数。例如可以用于货币计算

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值