数组
1.1 定义
数组:是一种容器,可以存放多个数据值
数组特点:
- 数组是一种引用数据类型
- 数组当中的多个数据,类型必须统一
- 数组的长度在程序运行期间,不可改变
1.2 数组的初始化
4. 动态初始化(指定长度)
5. 静态初始化(指定内容)
1.3 格式
1.3.1动态初始化数组的格式:
数据类型【】数组名称 = new 数据类型【数组长度】;
解析:左侧数据类型:也就是数组当中保存的数据全都是统一的什么类型
左侧的中括号:代表我是一个数组
左侧的数组名称: 给数组取一个名字
右侧的new:代表创建数组的动作
右侧数据类型:必须和左边的数据类型保持一致
右侧中括号的长度,也就是数组当中,当地可以保存多少个数据,是一个int数字
例子 创建一个数组, 能存放10个double类型的数据
double[] array1 = new double [10];
例子 创建一个数组,能存放5个字符串
String[] array2 = new String [5];
1.3.2 静态初始化的格式:
在创建数组的时候,不直接指定数据个数多少,直接将具体的数据内容进行指定
注意事项:静态初始化虽然没有直接告诉长度,但是根据大括号里面的元素的具体内容,也可以自动推算出来长度
数据类型【】数组名称 = new 数据类型【】{元素1,元素2,…};
例子: 直接创建一个数组,里面装的全是int 数字,具体为5,15,25
int[] array3 = new int []{5,15,25};
省略格式
数据类型【】数组名称 = {元素1,元素2,。。。};
标准格式可以进行拆分格式:
int [] arrayA;
arrayA = new int[]{11,21,31};
动态也可以
int[] arrayB;
arrayB = new int[5];
***使用建议
如果不确定数组当中的具体内容,用动态初始化,如果已经确定了具体的内容,用静态初始化
1.4 访问数组元素进行获取
索引值从0 开始,一直到数组的长度-1为止
System.out.println(array[0]);
打印数组中的第0个元素
1.5 访问数组元素进行赋值
使用动态初始化的时候,其中的元素将自动拥有默认值
如果是整数类型 默认为0
浮点类型 默认为0.0
字符类型 默认为 ‘\u0000’
布尔类型 默认为false
引用类型 默认为null
array [1] = 123; //将123赋值给数组中的1号元素
java的内存需要划分为5个部分:
- 栈 stack: 存放的都是方法中的局部变量;方法的运行一定要在栈当中运行。局部变量:方法的参数,或者是方法{}内部的变量; 作用域:一旦超出作用域,立刻从栈内容中消失。
- 堆(Heap): **凡是new出来的东西,都在堆当中。**堆内存里面的数据,都有默认值
规则: 如果是整数类型 默认为0
浮点类型 默认为0.0
字符类型 默认为 ‘\u0000’
布尔类型 默认为false
引用类型 默认为null - 方法区(method area): 存储.class 相关信息 包含方法的信息
- 本地方法栈(native method stack): 与操作系统有关
- 寄存器(pc register): 与cpu相关
1.5 常见问题 所有的引用类型都可以赋值为null值,但是代表其中什么都没有
6. 数组索引越界异常:原来数组中只有3个元素,但却索引了第4个元素(Array Index Out of Bounds Exception).
7. 空指针异常:只定义没有new初始化 相当于一个空壳 Null pointer Exception
1.6 获取数组长度
int[] arrayA = new int[3];
int[] arrayB = {10,20, 30, 40, 50, 05, 50}
数组名称.length
这样会得到一个int数字,代表数组的长度
int len = arrayB.length;
System.out.println(“arrayB数组的长度” + len);
***数组一旦创建,程序运行期间,长度不可改变
1.7 遍历数组
对数组当中的每一个元素进行逐一挨个处理,默认的处理方式就是打印输出。
int[] array = {15, 25, 30, 40, 50};
for(int i = 0; i<5; i++){
System.out.println(array[i]);
}
for(int i = 0; i< array.length; i++){
System.out.println(array[i]);
}
// array.fori自动生成代码
1.8 求出数组中的最值 见code
1.9 数组元素的反转
数组元素的反转
本来的样子【1,2,3,4】
反转【4,3,2,1】
其实就是***对称位置***的元素交换
int min = 0;
int max = array.length-1;
什么时候停止交换?
当min 和max 相等或者说撞上了就 停止交换
或者min>max
换言之min<max 就应该交换
public class ArrayReverse{
public static void main (String[]args){
int[]array = {10,20,30,40,50};
//遍历数组本来的样子
for(int i =0; i<array.length;i++){
System.out.println(array[i]);
}
for(int min=0,max=array.length-1;min<max;min++,max--){
int temp = array[min];
array[min] = array[max];
array[max] = temp;
}
// 再次打印数组反转后的样子
for(int i =0; i<array.length;i++){
System.out.println(array[i]);
}
}
2.0 数组作为方法参数
调用方法的时候,向方法的小括号进行传参,传进去的就是数组的地址值
public static void main…
int[] array = {10,20,30,40,50};
printArray(array);
public static void printArray (int [] array){
for…
}
2.1 数组作为方法返回值
一个方法可以有0,1.多个参数,但是只能有0 或1 个返回值,不能有多个返回值
如果希望一个方法当中产生了多个结果数据进行返回,怎么办?
使用一个数组作为返回值类型就行。
任何数据类型 都能作为方法的参数或者返回值类型
数组作为方法的参数,传递进去的是数组的地址值
数组作为方法的返回值,返回的也是数组的地址值
public class ArrayReturn{
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;
}
}