1、数组:存储同一种数据类型的多个元素的容器
2、格式:
A: 数据类型 [ ] a;
B: 数据类型 a [ ];
例子:
A:int [] a;
B: int b [];
注意:
效果是一样的,都是定义一个int类型的数组,就是念法上的不一样。
3、如何对数组进行初始化?
A:初始化:就是为数组开辟内存空间,并为每个数组元素赋值
B:有2种初始化方式:
a:动态初始化 只制定长度,由系统给出初始化值
b:静态初始化 给出初始化值,由系统决定长度
动态初始化格式:
数组类型 [] 数组名 = new 数据类型 [数组长度];
例子:
int [] a = new int [4];
如何获取数组中的元素:
通过:
数组名(索引)
索引:其实就是每个元素的编号,从0开始,最大的索引是数组的长度-1。
PS: java为了提高程序的效率,就对数据进行了不同空间的分配。
具体的划分如下:5个内存空间:
1、栈:存放 局部变量 (int [] a 也在栈里面) 局部变量必须给初始值
2、堆:存放 所有new出来的东西 (new int [3]在堆里面) 成员变量在栈里面,它可以不给初始值,因为系统会给它默认值
3、方法区:(面向对象部分再说)
4、本地方法区:和系统相关
5、寄存器:CPU使用
注意:
a:局部变量:在方法定义中或方法声明上的变量都叫做局部变量
b:栈内存和堆内存的区别:
栈:数据使用完毕后,就消失
堆:数据使用完毕后,并不立即处理,而是在垃圾回收器空闲的时候回收
每一个new出来的东西都有地址
每一个变量都有默认值
byte , shotr , int , long 0
float , double 0.0
char '\u0000' 就是空字符
boolean false
引用类型 null
数组的静态初始化:
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
简化格式:
数据类型[] 数组名 = {元素1,元素2,…};
举例:
int[] arr = new int[]{1,2,3};
简化后:
int[] arr = {1,2,3};
注意事项:
不要同时动态和静态进行。
如下格式:
int[] arr = new int[3]{1,2,3}; //错误
数组操作的两个常见小问题:
ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
注意:把一个数组赋值给另外一个数组的话,会同时把数组的元素以及地址赋予过去
例子:
[代码]java代码:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /* 定义一个数组,输出该数组的名称和数组元素值。 给数组元素赋值,再次输出该数组的名称和数组元素值。 */ public class ArrayDemo2 {
public static void main(String[] args) { // TODO Auto-generated method stub int[] a1 = new int [3]; a1[0] = 88; a1[1] = 33; a1[2] = 66;
System.out.println(a1); //这大段输出语句并不能放在a3数组下面,到时候输出的数据跟a3一样 System.out.println(a1[0]); System.out.println(a1[1]); System.out.println(a1[2]);
int[] a2 = new int [3]; a2[0] = 22; a2[1] = 44; a2[2] = 55;
int[] a3 = a1; //这里a1给a3的不止是元素数值,还有它的地址 a3[0] = 100; a3[2] = 200;
System.out.println(a2); System.out.println(a2[0]); System.out.println(a2[1]); System.out.println(a2[2]);
System.out.println(a3); System.out.println(a3[0]); System.out.println(a3[1]); System.out.println(a3[2]); } } |
PS:图片来源于教程