java—数组1(数组常见问题,操作数组)

数组概念:是一种容器,可以同时存放多个数值

数组特点:
	1. 数组是一种引用数据类型
	2. 数组当中的多个数据,类型必须统一
	3. 数组的长度在程序运行期间不可改变

数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值

两种常见的初始化方式:
	1. 动态初始化(指定长度)
		在创建数组的时候,直接指定数组中的数据元素个数
		
		格式: 数据类型[] 数组名称 = new 数据类型[数组长度];
		
		数据类型:数组中保存的数据,全部都是统一的什么类型
		[] : 代表是一个数组
		数组名称·: 给数组取一个名字
		new: 代表创建数组的动作
		右侧的数据类型:必须和左边的数据类型保持一致
		[数组长度]: 就是数组中,可以保存多少个数据,是一个int 数字
	2. 静态初始化(指定内容)
		在创建数组时,不指定数据个数多少,而是直接将具体的数据内容进行指定

		格式: 数据类型[] 数组名称 = new 数据类型[] { 元素1, 元素2, ... };
		省略格式:数据类型[] 数组名称 ={ 元素1, 元素2, ... };
	
	注意:
		1. 虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出来长度
		2. 静态初始化标准格式可以拆分为两个步骤
		3. 动态初始化也可以拆为两个步骤
		4. 静态初始化一旦使用省略格式,不能拆分为两个步骤
		
	使用建议:
		如果 不确定数组当中的具体内容,用动态初始化;
		否则,已经确定了具体内容,用静态初始化
public class Demo {
	public static void main(String[] args) {
		// 创建一个数组,里面可以存300个int数据
		int[] arrayA = new int[300]; // 动态初始化

		// 创建一个数组,里面全是int数字,具体为:5、15、25
		int[] arrayB = new int[] {  // 静态初始化
			5, 15, 25
		};
		int[] arrayC = { 5, 15, 25 };

		// 动态初始化标准格式可以拆分为两个步骤
		int[] arrayD;
		arrayD = new int[5];

		// 静态初始化标准格式可以拆分为两个步骤
		int[] arrayD;
		arrayD = new int[] { 1, 2, 3 };
	}
}
访问数组元素:
	直接打印数组名称,得到的是数组对应的:内存地址哈希值
	二进制: 01
	十进制: 0123456789
	十六进制: 0123456789abcdef

访问数组元素的格式:数组名称[索引值]
索引值:就是一个int数字,代表数组当中元素的编号
【注意】索引值是从0开始,一直到“数组的长度 - 1”为止
public class Demo {
	public static void main(String[] args) {
		// 静态初始化的省略格式
		int[] array = { 1, 2, 3 };
		System.out.println(array); // [I@1540e19d
		
		// 直接打印数组中的元素
		System.out.println(array[0]); // 1 
		System.out.println(array[1]); // 2 
		System.out.println(array[2]); // 3 
		
		// 也可以将数组中的某一个单个元素,赋值交给变量
		int num = array[1];
		System.out.println(num); // 2

		/* 动态初始化数组的时候,其中的元素有一个默认值,规则:
		如果是整数类型,默认为0
		浮点类型,默认为0.0
		字符类型,默认为'\u0000'
		布尔类型,默认为false
		引用类型,默认为null

		注意:静态初始化其实也有默认值的过程,只不过系统自动
		将默认值替换成为了大括号当中的具体数值
		*/
		int[] arrayB = new int[3];
		System.out.println(arrayB); // 内存地址值
		System.out.println(arrayB[0]); // 0
		System.out.println(arrayB[1]); // 0 
		System.out.println(arrayB[2]); // 0 
		arrayB[0] = 123;
		System.out.println(arrayB[0]); // 123
		System.out.println(arrayB[1]); // 0 
		System.out.println(arrayB[2]); // 0 
	}
}
java的内存划分成5个部分
1. 【栈(Stack)】:存放的都是方法中的局部变量。【方法的运行一定要在栈当中】
	局部变量:方法的参数,或者是方法{}内部的变量
	作用域:一旦超出作用域,立刻从栈内存中消失
2.【 堆(Heap): 凡是new出来的东西,都在堆内存中。】
		堆内存里面的东西都有一个地址值:16进制
		堆内存里面的数据,都有默认值,规则:
			如果是整数,默认为0
			浮点数   =>   0.0
			字符     =>   "\u0000"
			布尔     =>   fasle
			引用类型  =>   null
3. 【方法区(Method Area)】:存储class相关信息,包含方法的信息
4. 本地方法栈(Native Method Stack):与操作系统有关
5. 寄存器(pc Register):与CPU相关
把方法信息加载到栈中,在栈中开辟空间,new出来的都在堆中,栈中存的只是堆中的地址

在这里插入图片描述
在这里插入图片描述

  1. 数组常见问题

    数组索引越界
    	数组的索引从0开始,一直到“数组的长度-1”为止
    	如果访问的数组元素,索引编号并不存在,那么将会发生数组索引越界异常
    	ArrayIndexOutOfBoundRxception
    	原因:没有找到数组索引编号的元素
    
    空指针异常
    	所有的引用类型的变量,都可以赋值为一个null值,代表其中什么都没有
    	数组必须进行new初始化才能使用其中的元素,否则空指针异常
    	NullPointerException
    	原因:没有new
    
    // 数组索引越界
    int[] array = { 1, 2, 3};
    System.out.println(array[3]); // 报错 ArrayIndexOutOfBoundRxception
    
    // 空指针异常
    int[] arrayA; // => int[] arrayA = null;
    // array = new int[3];
    System.out.println(arrayA[0]); // 报错 NullPointerException
    
    
  2. 操作数组

    1. 获取数组长度 :  .length      (会得到一个int数字,代表数组长度)
    	数组一旦创建,程序运行期间,长度不可改变
    
    int[] arrayA = new int[3];
    
    int[] arrayB = { 1, 12, 13, 14, 15, 44, 55, 66 };
    System.out.println(arrayB.length); // 8
    
    2. 遍历数组
    	对数组中的每一个元素进行逐一处理
    
    int[] array = {1,2,3};
    
    // 循环遍历
    for (int i = 0; i < array.length; i++) {
    	System.out.println(array[i]);
    }
    
    
    3. 数组的反转 (修改原数组)
    	[1,2,3]   =>  [3,2,1]		
    
    int[] array = {1,2,3};
    for (int min = 0,max = array.length; min < max; min++, max--) {
    	int temp = array[min];
    	array[min] = array[max];
    	array[max] = temp;
    }
    

    在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苟圣啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值