文章目录

  • 一、Eclipse 的使用
  • 二、数组
  • 1.一维数组
  • ①声明和初始化
  • ②调用数组指定位置的元素
  • ③获取数组的长度
  • ④遍历数组
  • ⑤数组元素的初始化值
  • ⑥数组的内存解析
  • 1.二维数组
  • ①声明和初始化
  • ②调用数组指定位置的元素
  • ③获取数组的长度
  • ④遍历数组
  • ⑤数组元素的初始化值
  • ⑥数组的内存解析



一、Eclipse 的使用

详见E盘 Eclispe的使用配置.pdf

二、数组

定义:

  • 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

概述:

  • 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
  • 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
  • 数组的长度一旦确定,就不能修改。
  • 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。

分类:

  • 按照维度:一维数组、二维数组、三维数组、…
  • 按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对
    象数组)

1.一维数组

①声明和初始化
  • 静态初始化:数组的初始化和数组元素的赋值操作同时进行。
int[] ids;   //声明
ids=new int[] {1,25,4};   //初始化

或者:

int ids[] = new int[] {1,25,4};

int ids[] = {1,25,4};  //类型推断

也可以。

  • 动态初始化:数组的初始化和数组元素的赋值操作分开进行。
String[] names= new String[3];  //这里与c++一样,必须指定数组长度或者像静态初始化一样赋值
names[0] = “钱学森”;
names[1] = “邓稼先”;
names[2] = “袁隆平”;

[ ]的位置,可以在数据类型后面也可以在数组名后。注意java数组定义方式与c++的区别,Java语言中声明数组时不能指定其长度(数组中元素的数), 例如:int a[5]; //非法 而c++可以。

②调用数组指定位置的元素

通过下标调用:

names[0] = “钱学森”;
names[1] = “邓稼先”;
names[2] = “袁隆平”;
③获取数组的长度

与c++相同,length函数

System.out.println(ids.length);
④遍历数组

利用 for 循环

⑤数组元素的初始化值
  • 对于基本数据类型而言,默认初始化值各有不同:
  • 数据类型是整型:0
  • 数据类型是浮点型:0.0
  • 数据类型是char型:ascii值是0 对应的字符(像个空格但不是空格)
  • 数据类型是boolean型:false(底层用0存储)
  • 对于引用数据类型而言,默认初始化值为null(注意与0不同!)。
  • 数据类型是string型:null
⑥数组的内存解析

内存的简化结构:

java 数组栈 java数组视频教学_数组元素


放在方法中的变量都是局部变量,如main方法中的变量。

如定义:

int[] arr = new int[]{1,2,3};

那么arr在栈中,arr的内容在堆中。通过把arr开辟的堆空间的首地址值(十六进制)赋给arr,那么arr就可以找到数组的位置了。

同理:

String[] arr1 = new String[4];
arr1[1] = “刘德华”;
arr1[2] = “张学友”;

若重新建一个数组:此时栈空间的指针指向新的堆空间,那么上一个arr1成为垃圾,会在某个特定的时间回收。

arr1 = new String[3];  //重新开辟了一个堆空间
System.out.print(arr1[1]);//此时输出结果是null

在程序中,当执行结束后,栈空间的元素出栈,堆空间没有指针指向它,于是之后被回收。
过程如下图:

java 数组栈 java数组视频教学_数组_02

1.二维数组

①声明和初始化
  • 静态初始化:数组的初始化和数组元素的赋值操作同时进行。
int ids[][] = new int[][] {{1,25,4},{1,2}};

int ids[][] = {{1,25,4},{1,2}};

也可以。

  • 动态初始化:数组的初始化和数组元素的赋值操作分开进行。
String[][] names= new String[3][];

String[][] names= new String[3][2];

String[] names[] = new String[3][];
②调用数组指定位置的元素
System.out.println(ids[1][0]);
③获取数组的长度

与c++相同,length函数

System.out.println(ids.length);      //注意此时结果是2
④遍历数组
for(int i=0;i<ids.legnth;i++)
	for(int j=0;j<ids[i].length;j++)
		System.out.println(ids[i][j]);
⑤数组元素的初始化值
  • 外层元素:ids[0],ids[1]              是一个地址值,即开辟的堆空间的第一个数组中存的第一个数组的首地址值(二维数组就是一维数组中每一项又是一维数组)。
  • 内层元素:ids[0][0],ids[0][1],ids[1][0],ids[1][1]                                 0
  • 而arr的初始值也是一个地址值,是开辟的堆空间的首地址值(两个一维数组的空间的首地址)

以上外层数组的初始值是地址,内层数组与一维数组相同。

特殊情况:

  • 对于double[][] names= new double[3][];外层数组的初始值是null,此时每一个外层元素(数组)内层元素(数组)还没有赋值,且数组是引用数据类型,所以初始值是null。内层数组初始值无法调用。(没有初始值)。
⑥数组的内存解析

过程如下图:

(红色竖线表示首地址位置)

java 数组栈 java数组视频教学_java 数组栈_03