java语法基础3——数组

数组

JVM的内存模型

JVM内存划分,人为的根据不同内存空间的存储特点以及存储的数据,主要理解方法区、栈和堆。

1.方法区:存放已被加载的类信息,比如全局变量
2.栈:当方法被执行时会创建一个栈帧,用来存放局部变量等信息
3.堆:存放数组和所有的对象实例
4.GC(垃圾回收站):当JVM资源不够用时,会自动回收无用的对象(没有被引用的数组、对象等等)。
数组的定义
数组:把同类型的多个常量值有序的存储起来。
//语法:数据类型[] 数组名;
int[] ages;
数组的静态初始化

知道了数组的具体元素建议使用静态初始化

// 数组的静态初始化
ages = new int[]{1,2,3,4,5};
数组的动态初始化

只知道数组的长度(元素个数),不知道具体元素是什么建议使用动态初始化

// 数组的动态初始化
ages = new int[4];
一维数组的操作
1.基本操作
// 数组定义并静态初始化
int[] nums = new int[]{1,2,3,4,5,6,7,8,9};	//可以简写为:	int[] nums = {1,2,3,4,5,6,7,8,9};

// 数组定义并动态初始化
String[] names = new String[5];	//只声明长度,不列出具体元素,所有元素均默认为0

// 获取数组的长度	语法:	数组名.length
System.out.println(nums.length);	//打印nums数组的长度

// 获取数组元素值
System.out.println("获取并打印nums数组索引为0的元素" + nums[0]);	//根据索引获取数组元素

// 设置元素值	语法:	数组名[索引] = 常量;
nums[0] = 9;	//将9赋值给数组的第一位(索引为0)

// 遍历数组,也就是把数组中的所有元素取出来
for (int i = 0; i < nums.length; i++) {		//使用for循环,根据索引递增逐个打印
	System.out.println(nums[i]);
}

// 使用for-each遍历数组,for循环的增强,可以减少代码量,在不用获取数组索引的需求中使用
for (int ele : nums) {		//定义ele变量接收数组的值,类型要与数组类型相同
	System.out.println(ele);
}
2.报错分析

使用数组报错的情况一般为:
(1).ArrayIndexOutOfBoundsException:索引越界,使用的索引超过了数组的长度
(2).NullPointerException:空指针错误,使用的数组未初始化或者为空(没有分配内存空间)

// 数组的索引越界报错
int[] ages = {1,2,3,4,5};
System.out.println(ages[6]);	// 数组长度为5,索引最大为4,"ages[6]"索引就会越界,运行就会报错

// 数组空指针报错
String[] names = null;
System.out.println(names.length);	//数组为空,操作数组就会报空指针错误
二维数组

一般常用的是一维数组,二维数组用的不多,仅作了解参考:

// 二维数组的定义,语法: 数据类型[][] 数组名;	
int[][] nums;

// 静态初始化,二维数组的元素是一个一个的一维数组
nums = new int[][]{{1,2},{3,4,5},{6,7,8,9}};

// 动态初始化
nums = new int[3][2];	// 该数组由3个拥有2个元素的一维数组构成,并且所有元素默认是0

// 定义并初始化
String[][] names = {{"小白","小黄"},{"小红"}};	//静态初始化,二维数组不支持初始化后再赋值
int[][] ages = new int[2][3];	//动态初始化

// 获取数组长度
System.out.println(nums.length);	//获取打印的结果是3,表示该二维数组由3个一维数组组成

// 获取数组元素值
System.out.println(nums[1][1]);		//表示获取nums数组中第二个一维数组的第2个元素的值

// for循环遍历数组
for (int i = 0; i < nums.length; i++) {		//嵌套循环遍历
	int[] a = nums[i];	//定义一维数组接收二维数组遍历出来的一维数组
	for (int j = 0; j < a.length; j++) {	//遍历每个接收到的一维数组
		System.out.println(a[j]);	//打印每个一维数组中的元素
	}
}

// for-each遍历数组
for (int[] ele : nums) {	//定义一维数组接收遍历的元素
	for (int b : ele) {		//遍历得到的一维数组
		System.out.println(b);
	}
}

练习
1.定义一个元素为String类型数组,按照格式逆序打印该数组的元素,例如数组内容为:{“A”,”B”,”C”,”D”},打印效果为:[D,C,B,A]
String[] names = {"A","B","C","D"};
String str = "[";		// 定义拼接字符串变量
for (int i = names.length-1; i >= 0; i--) {		// 反序遍历,从索引最大的开始往后倒
	if (i == 0) {		// 判断索引是否都0了(也就是判断是不是到了数组第一个元素了)
		str += names[i] + "]";	// 如果是拼接结束的"]"
	} else {
		str += names[i] + ", ";	// 否则拼接", ",继续循环
	}
}
System.out.println(str);	// 打印拼接后的字符串变量
2.定义一个 int 类型的二维数组:{{1,2,0,4,0},{0,3,5}},统计数组元素值是 0 的元素个数。
int[][] nums = {{1,2,0,4,0},{0,3,5}};
int count = 0;	// 定义计数变量,用来计数出现0的次数
for (int[] ele : nums) {	// 使用for-each遍历数组,定义一维数组接收二维数组的元素
	for (int num : ele) {
		if (num == 0) {		// 判断数组中元素0出现的次数
			count++;	// 出现一次则count加1
		}
	}
}
System.out.println("数组中元素0的个数是:" + count);
3.定义一个整型数组arr={1,13,45,5,0,0,16,6,0,25,4,17,6,7,0,15},将数组中的0去掉后返回一个新数组newArray。(本题源码在最上面,StatisicsDemo3.java)
int[] arr = {1,13,45,5,0,0,16,6,0,25,4,17,6,7,0,15};
int count = 0;	// 定义一个计数变量,如果数组中元素不为0则加1
for (int ele : arr) {	// 遍历数组
	if (ele != 0) {
		count++;		// 找出一共有多少个不为0的元素
	}
}
int[] newArray = new int[count];	// 定义并动态初始化新数组,长度为原数组去掉0后的元素数
int j = 0;		// 定义一个索引变量,从0开始累加,用来将原数组不为0的元素写入新数组
for (int ele : arr) {
	if (ele != 0) {		// 遍历原数组,找出非0的元素赋值给新数组
		newArray[j] = ele;
		j++			//如果赋值成功则索引加1
	}
}
System.out.println(java.util.Arrays.toString(newArray));	//使用jdk自带的包打印新数组,观察是否达到预期效果
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值