head first java 01 ( 1 ~ 3 章 )

- java 中的整型和boolean不通用

  int x = 1; while (x) {} 这是错误的

- 创建对象

  需要两个类, 一个是操作类例如 Dog, 另外一个是测试类, 带有main函数.

- main()的两种用途

  • 测试真正的类
  • 启动你的Java程序

- 垃圾收集

image

image

  注意:此处的 c, d 分别在两块内存单元里, 只是他们的指向是相同的, 即 这是两个指针变量, 这两个指针变量的值是相同的, 但是它们俩本身

  的指针(地址)是不同的.

image

另外:

image

image

image

- 数组是对象 (只要是对象, 就会存在于堆内存中)

  数组变量实际上就是指针,

  int[] nums; // 1步, 创建指针

  nums = new int[7];  // 2步, 在堆内存中分配空间, 并将 nums指针指向该内存区域

  nums[0] = 6; // 3步, 可以使用该区域了, 可以直接使用了. 6 就是一块实实在在的内存区.

  对象数组中, 数组中保存的内容是对象的指针(引用), 而并非真正的对象.

  Dog[] pets; // 1步, 创建指针

  pets = new Dog[7]; // 2步, 在堆内存中分配空间, 并将pets指向该内存区域, 但是每个元素中存放的是指针, 该指针目前是野指针.

  pets[0] = new Dog(); // 3步, 在堆内存再分配空间来保存 Dog对象, 此时的 pets[0]中的指针(引用)指向该Dog对象的内存单元.

                       // 所以, 对象数组其实就是 2 级指针. 然后才找到实实在在的内存区域.

  pets[0].break(); // 使用内容, 由此可见, pets 本身是不可能指向实实在在的内存区的.

  注意: 对象数组在创建完以后, 还需要对每个数组成员再创建对象, 否则该数组成员就是野指针.

原文地址:https://www.cnblogs.com/moveofgod/p/2998036.html