1.重新认识基本类型的变量

  • 变量的基本逻辑——有定才有变,在人看来,变量固定的是名字,改变的是值;但是在计算机看来,不变的是地址,变化的是值

  • 理解计算机如何使用内存,完成变量的功能

    (1)内存就是一堆白纸,只能通过页码编号访问,也就是所谓的内存地址
    
    (2)变量就是使用一个固定的地址加上这个地址对应的内存;计算机通过地址,读写地址对应的内存值,完成变量的赋值和访问值的功能,就好像根据页面编号在白纸上写字,然后擦掉再重复写的过程
    
    (3)变量的名就是地址,变量的实就是地址的内存值
    

2.认识数组

理解数组的名与实

  • 数组的实是一块地址连续的内存,就像是编号连续的一踏白纸

  • 数组的名,就是这个连续内存的第一个内存的地址

  • 数组的变量和基本变量一样,本身是个地址;但是与变量不一样的是,这个地址的值,是数组的“名”,也就是数组的第一个地址

1
int[] book = new int[10];

创建数组的过程是

  • 先new一个指定长度的数组(就是一块连续的地址)

  • 然后把这一块连续地址中第一个地址的值赋值给变量book

  • book本身作为一个变量,也是有地址的(比如book的地址),然后book这个变量的值就是new出来的那一块连续地址中的第一个地址

数组=数组变量+数组的实体

  • 数组变量[索引]就是在数组原有地址的基础上,加上索引,获得想要的元素

  • 所以索引是从0开始的,因为索引变量的值就是数组第一个元素的地址,不需要加一

3.数组的长度

  • 数组变量.length可以获得数组的长度

  • 数组创建之后,长度不可以改变

4.数组索引过界和初始值

  • 访问数组过界出错,报错 IndexOutOfBoundsException

  • 如果没有把握数组是否会出界,可以把索引和数组长度做比较,注意索引是从0开始,不是从1开始

  • 数组中每个元素都有初始值,初始值和类型有关,对于数字类型,初始值是0,boolean类型,初始值是false

5.让数组变量指向新的数组

  • 数组变量可以指向新的数组实体,这时候,数组变量的值就是新的数组实体的地址;这种数组变量的赋值操作,叫做让变量指向新的数组

  • 如果没有别的数组变量指向原来的数组实体,也就是说,如果没有变量记得原来数组的地址,原来的数组实体也就不可访问,相当于“消失”了

  • 对于非基本类型的变量,计算机都要通过这种“两级跳”的方式实现,基本类型变量,“一跳”就可以

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class WhatArray {

public static void main(String[] args) {
int[] array = new int[10];
System.out.println(array[array.length-1]);

int[] array1 = new int[2];
System.out.println("数组array1的长度是" + array1.length);

array1 = new int[3];
System.out.println("数组array1的长度是" + array1.length);

}

}

输出:

0

数组array1的长度是2

数组array1的长度是3