数组
- 是一种容器,可以同时存放多个数据值
- 数据的特点
1.数组是一种引用类型
2.数组中的多个数据,类型必须统一
3.数组的长度在程序运行期间不可改变 - 数组的初始化
1.动态初始化(指定长度)
2.静态初始化(指定内容)
动态初始化数组的格式: 数据类型[] 数组名称 = new 数据类型[数组长度]; 解析含义: 左侧数据类型,也就是数组当中保存的数据,全部都是统一的什么类型 左侧的中括号,代表我是一个数组 左侧数组名称:给数组取一个名字 右侧的new:代表创建数组的动作 右侧数据类型:必须和左边的数据类型保持一致 右侧:中括号的长度:也就是数组当中,到底可以保存多少个数据,是一个int数字
- 静态初始化基本格式:
数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,...}
虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出来长度。
int[] arrayA = new int[]{5, 15, 25}; String[] arrayB = new String[]{"Hello","World","Java"};
使用静态初始化数组的时候,格式可以省略一下。
标准格式:
数据类型[] 数组名称 = new 数据类型[]{元素1, 元素2,...}
省略模式:
数据类型[] 数据名称 = {元素1,元素2, ...};
注意事项:
1.静态初始化没有直接指定长度,但是仍然会自动推算得到长度
2.静态初始化标准格式可以拆分成两个步骤。
3.动态初始化也可以拆分成两个步骤。
4.静态初始化一旦使用省略格式,就不能拆分为两个步骤了。
使用建议:如果不确定数组内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。
数组的元素获取
- 直接打印数组名称,得到的是数组对应的,内存地址的哈希值。
- 访问数组的格式:数组名称[索引值]
索引值:就是一个int数字,代表数组当中元素的编号。
【注意】索引从0开始,一直到数组长度-1为止。
数组元素的赋值
使用动态初始化数组的时候,其中元素将会自动拥有一个默认值。规则如下:
如果是整型类型,默认0
如果是浮点类型,默认0.0
如果是字符型,默认'\u0000'
如果是布尔型,默认false
如果是引用类型,默认null
注意事项:
静态初始化其实也有默认值的过程,只不过系统自动马上把赋值的值替换了默认值。
JAVA中的内存划分
5个部分
1.栈(Stack):存放的都是方法中的局部变量
局部变量:方法的参数,立刻从栈内存中消失
作用域:一旦超出作用域,立刻从栈内存中消失2.堆(Heap):凡是new出来的东西,都在堆当中,堆内存里面的东西都有一个地址值:16进制堆内存里面的数据,都有默认值。规则同数组默认值。
3.方法区(Method Area):存储.class相关信息,包含方法的信息。
4.本地方法栈(Native Method Stack):与操作系统相关
5.寄存器(pc Register):与CPU相关。
栈是名字张三,堆是能吃饭能睡觉能学习的张三
类似于Python中的深拷贝和浅拷贝
数组越界
索引编号不存在,就会发生数组索引编号越界异常。
空指针异常
所有的引用类型变量,都可以赋值为一个null值。但是代表其中什么都没有。
数组必须进行new初始化才能使用其中的元素
如果只是赋值了一个null,没有进行new创建
那么将会发生空指针异常NullPointerException
原因:忘了new
解决:补上new
获取数组长度
-.length
-数组一旦创建,程序运行期间,长度不可改变。
遍历数组
array.fori
最大值
比武招亲
数组元素的反转
数组作为形参传入
- 当调用方法的时候,向方法中的小括号进行传参,传递进去的其实就是数组的地址值
数组作为返回值
- 如果一个方法中产生了多个结果数据进行返回,怎么办?
解决方案:使用一个数组作为返回类型即可
数组作为方法的参数,传递进去的其实是数组的地址值。
数组作为方法的返回值,返回的其实也是数组的地址值。public static int[] caculate(int a ,int b, int a){ int sum = a+b+c; int avg = sum/3; //两个结果都希望返回 //需要一个数组,也就是一个塑料兜,数组可以保存多个结果 int[] array = new int [2]; array[0] = sum; array[1] = avg; //int[] array = {avg,sum}; return array;
}