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
posted @ 2018-07-19 01:15  SmallMushroom  阅读(345)  评论(0编辑  收藏  举报