Thinking in Java 读书总结(一)
前言
之前有零散地阅读过TIJ,但是都是针对自己的问题去有针对性的阅读,没有从头梳理过Java的一些基础知识。从前段时间开始自己也开始了整体性地学习TIJ的过程,也从这篇博客开始把自己的一些感悟和理解总结起来,也希望能对大家和我自己都有些帮助。
第二章 一切都是对象
第一章大致都是一些面向对象语言或针对JAVA的特性的一些介绍,在后面的每一章中都有详细的介绍,所以从读书总结从第二张开始。
2.1 用引用操作对象
- 对于Java对象,操作的标识符都是引用,且引用可脱离对象单独存在。
- 如果向未指向对象的引用发送消息,那么会返回一个运行时错误 -->动态绑定机制。
2.2 对象存储
2.2.1 JVM的存储分区
对于这一块,JVM的内存模型是必须要清楚的内容,这个博客对于JVM内存模型的介绍非常全面,可以参考学习。
简略的说,内存可以分为虚拟机栈,本地方法栈,程序计数器,堆,方法区(包含运行时常量池)等部分。
2.2.2 基本类型
Java在任何平台上每种基本类型所占空间的大小都一致,这也是Java跨平台特性的原因之一。
参考2.2.1中可知,java基本类型不存储在堆中,而基本类型对饮的包装类的实例对象存储在堆中,java提供了自动包装机制来处理基本类型和实例对象的转换问题。
特别的是:基本类型的包装类和String类都是final的,不可变,所以每次操作都会生成一个新的对象,看起来和基本类型的传值操作很相似。
且String类在初始化时JVM针对其初始化的方式的不同会有不同的处理,后面专门讲解String的章节会详细介绍。
2.3 对象作用域
java中主要是用花括号来控制作用范围。
基本类型的作用域:
{
int x = 12;
/* only x available */
{
int q = 96;
/* both x & q available */
}
/* only x available */
/* q “out of scope” */
}
而下面的方式是不允许的,在C++中是可以的,但在Java中是不被允许的。
{
int x = 12;
{
int x = 96; /* illegal */
}
}
对象的作用域:
new的对象可以存活在作用域之外,只要有引用一直指向它,那么对象就不会消失,但在范围外引用会失效。
2.4 类
2.4.1 成员变量初始化
类的成员变量在实例化时会自动初始化,在没有指定的情况下,基本类型会初始化成为默认值,类对象会设置成为null。
-
类型 值 Boolean false Boolean false char false Boolean '\u0000'(null) byte (byte)0