数组的初始化,为数组开辟连续的存储空间,并为每个元素赋值;
Java一维数组定义格式:
int[] x = new int[num];
数组既可以存储基本数据类型,又可以存储引用数据类型。
数组初始化
1、动态初始化 只指定长度,并由系统给出初始化的值 (在内存空间中开辟指定数量的的空间)
地址值+数组编号才能找到地址
默认初始化值 byte short int long = 0
float double = 0.0
bool = false
char = '\u0000' char占两个字节 16个二进制位
直接打印数组[i 半个代表一位数组 i代表int 后面是数组地址
2、静态初始化 给出初始化的值,然后由系统决定长度
int[] arr = new int[]{1,2,3};//可以先声明后赋值
int[] arr = {1,2,3};//简写形式声明赋值必须在一行
(动态初始化和静态初始化不能混合使用)
内存有五块空间(.class进入内存空间运行)
1、栈空间:
存储局部变量
2、堆空间
存储new出的数组或对象
3、方法区
面向对象(代码区)
4、本地方法区
和系统有关
5、寄存器
给CPU使用
main方法放在栈底,最先放入,最后执行
数组越界和空指针的问题探索
1、ArrayIndexOutOfBoundsException数组越界 访问了不存在的索引
2、NullPointerException空指针异常 数组已经不再指向堆内存,但仍用数组名去访问元素
数组的遍历(普通循环遍历)
数组的反转操作
for(int i = 0;i< arr.length/2;i++){
int temp = arr[i];
arr[i] = arr[arr.length-i-1];
arr[arr.length-i-1] = temp;
}
数组查表法
二维数组的初始化和赋值
int[][] array = new int[m][n];
int[] array[] = new int[m][n];
int[] array[] = new int[m][]; //一位数组不赋值
array[i]= new int[n];
int [][] array = {{1,1},{1,1,1}};
注意,引用初始化数据类型的值都为null
Java 中参数传递的问题
基本数据类型值传递,不改变原值,因为后会出现弹栈操作,局部变量随之消失
引用数据类型值传递改变原值,因为即使方法弹栈,但是堆内存的数组对象可以通过地址继续访问
Java中到底是传值还是传地址 java中只有传值,因为地址也是值