数组
数组的特点:
- 数组是一种引用数据类型
- 数组中的多个数据类型必须统一
- 数组的长度在程序运行期间不可改变
一维数组的初始化
- 动态初始化(指定长度)
数据类型[] 数组名称 = new 数据类型[数组长度];
- 静态初始化(指定内容)
数据类型[] 数组名称 = new 数据类型[] {元素1,元素2,…};
注意事项:虽然静态初始化没直接告诉长度,但是根据大括号里面元素的具体内容,也可以自动推算出来长度。
使用静态初始化数组的时候,格式还可以省略一下。
省略格式:
数据类型[] 数组名称 = {元素1,元素2,…};
public class Demo01Array {
public static void main(String[] args) {
//动态初始化数组
int[] arrayA = new int[300];
double[] arrayB = new double[10];
String[] arrayC = new String[5];
//静态初始化数组
int[] arrayD = new int[] { 5,15,25 };
String[] arrayE = new String[] { "Hello", "World", "Java" };
//静态初始化数组的省略格式
int[] arrayF = { 10, 20, 30 };
}
}
访问一维数组元素进行赋值
直接打印数组名称,得到的是数组对应的内存地址哈希值
访问数组元素的格式: 数组名称[索引值]
【注意】索引值从0开始
使用动态初始化数组时,其中的元素自动拥有一个默认值,规则如下:
如果是整数类型,默认为0
如果是浮点类型,默认为0.0
如果是字符类型,默认为’\u0000’
如果是布尔类型,默认为false
如果是引用类型,默认为null
// 给数组元素赋值
arrayA[1] = 123;
二维数组
java中多维数组不必都是规则矩阵形式
/*
二维数组的定义
int[][] x
int[] x[]
int x[][]
*/
public class test1 {
public static void main(String[] args) {
//多维数组
int[][] list1 = new int[2][3];//动态初始化
int[][] list2 = {{1,2},{3,4,5}};//静态初始化
int[][] list3 = new int[2][];//只定义第一位长度
// 可以对这三个一维数组分别进行初始化
list3[0] = new int[3];
list3[1] = new int[1];
list3[2] = new int[2];
System.out.println(list1.length);
System.out.println(list1[0].length);
}
}
Java的内存划分
- 栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中
局部变量:方法的参数,或者是方法{}内部的变量
作用域:一旦超出作用域,立即从占内存中消失 - 堆(Heap):凡是new出来的东西,都在堆当中
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据,都有默认值 - 方法区(Method Area):存储class相关信息,包含方法的信息。
- 本地方法栈(Native Method Stack):与操作系统相关
- 寄存器(pc Register):与cpu相关
两个引用指向同一个数组
空指针异常
所有的引用类型变量,都可以赋值为一个null值。但是代表其中什么都没有。
数组必须进行new初始化才能使用其中的元素。
如果只是赋值了一个null,没有进行new创建,那么将会发生,空指针异常NullPointerException
数组的长度
int len = array.length;
System.out.println("array数组的长度是:"+len);
格式: 数组名称.length
如下图,改变数组的长度,堆中新建一个数组,数组名称指向新数组
数组作为方法参数传递
public class Demo03Array {
public static void main(String[] args) {
int[] array = {2,4,2,4,2,5,2};
arrayPrint(array);
}
//数组作为参数
public static void arrayPrint(int[] array){
for(int i = 0;i<array.length;i++){
System.out.println(array[i]);
}
}
}
注意: 向方法中的小括号进行传参,传递进去的其实是数组的地址值
数组作为返回值
当需要return的元素大于一个时,使用数组作为返回值
public class Demo03Array {
public static void main(String[] args) {
int[] result = calculate(10,20,30);
System.out.println("总和"+result[0]);
System.out.println("平均值"+result[1]);
}
//数组作为返回值
public static int[] calculate(int a,int b,int c){
int sum = a+b+c;
int avg = sum/3;
int[] array = {sum,avg};
return array;
}
}
注意: 数组作为方法的返回值,返回的其实也是数组的地址值