读书笔记-疯狂Java

读书笔记-疯狂Java:突破程序员基本功的16课

数组与内存控制

数组的初始化

所谓的数组初始化:就是为数组对象的元素分配内存空间,并为每个元素制定初始值,

数组的初始化方式

  1. 静态初始化
  • 初始化时不指定数组长度,显式的指定每个元素的初始值。
1
2
3
4
//静态初始化
int arr[]={1,2,3};

int arr2[]=new int[]{1,2,3};
  1. 动态初始化
  • 初始化时只指定数组长度,由系统为数组元素分配初始值。
1
2
//动态初始化
int arr[]=new int[3];

无论采用哪种方式,初始化完成后,数组的长度就不会发生改变。

所有局部变量都是放在栈内存里保存的。不管是基本类型的变量,还是引用类型的变量,都存储在各自的方法栈区。单引用类型变量所引用的对象(数组,普通java对象)存在堆内存中。

对象与内存控制

java内存管理:内存分配和回收。java依然存在内存泄漏

实例变量和类变量

  1. 成员变量

    类体内定义的变量成为成员变量(Field)

  • 实例变量(非静态变量):没有用static 修饰
  • 类变量(静态变量):用static 修饰
  1. 局部变量

    局部变量的作用时间短,存储在方法的/栈内存/中。

  • 形参:随方法的结束而消亡
  • 方法内的局部变量:随方法的结束而消亡
  • 代码块的局部变量:从初始化完成开始生效,随代码快的结束而消亡
实例变量和类变量的属性
  • 同一个jvm中每个类只能对应一个Class对象,因此,同应该jvm内的一个类的类变量只需一块内存空间。
  • 对于实例变量而言,该类每创建一个实例,就需要为该实例变量分配一块内存空间。
实例变量的初始化时机
  1. 定义实例变量时指定初始值
  2. 非静态初始化块中对实例变量指定初始值
  3. 构造器对实例变量指定初始值

其中执行顺序为(1,2)在3 之前。(1,2)的执行顺序与源程序的排列顺序相同。

类变量的初始化时机

实例变量属性类本身,当初始化该类的时候才会对该类变量分配内存空间,并执行初始化。

  1. 定义类变量时指定初始值。
  2. 静态初始块中对类变量指定初始值

执行顺序与源程序的排列顺序相同

父类构造器

  • 创建对象时候程序调用顺序
  1. 父类非静态初始块
  2. 父类构造器
  3. 本类非静态初始块
  4. 本类构造器

java集合

set和Map

HashMap HashSet
TreeMap TreeSet

java内存回收

java引用的种类

文章目录
  1. 1. 读书笔记-疯狂Java:突破程序员基本功的16课
    1. 1.1. 数组与内存控制
      1. 1.1.1. 数组的初始化
        1. 1.1.1.1. 数组的初始化方式
      2. 1.1.2. 对象与内存控制
        1. 1.1.2.1. 实例变量和类变量
          1. 1.1.2.1.1. 实例变量和类变量的属性
          2. 1.1.2.1.2. 实例变量的初始化时机
          3. 1.1.2.1.3. 类变量的初始化时机
        2. 1.1.2.2. 父类构造器
      3. 1.1.3. java集合
        1. 1.1.3.1. set和Map
          1. 1.1.3.1.1. HashMap HashSet
          2. 1.1.3.1.2. TreeMap TreeSet
      4. 1.1.4. java内存回收
        1. 1.1.4.1. java引用的种类
|