文章目录
- 一、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
⑥数组的内存解析
内存的简化结构:
放在方法中的变量都是局部变量,如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
在程序中,当执行结束后,栈空间的元素出栈,堆空间没有指针指向它,于是之后被回收。
过程如下图:
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。内层数组初始值无法调用。(没有初始值)。
⑥数组的内存解析
过程如下图:
(红色竖线表示首地址位置)