java中的数组基础

java中的数组

数组的定义

java中数据又两种定义格式。

  • 第一种 数据类型[] 变量名 (推荐使用)
    int[] arr;
    byte[] arr;
    double[] arr;
  • 第二种 数据类型 变量名[]
    int arr[];
    byte arr[];
    double[] arr;

数组的初始化

java中的数组初始化分为两种, 一种是动态初始化, 另一种是静态初始化

索引

数组中元素的编号, 从0开始, 可以用来访问数组中的元素格式:arr[0], arr[1];

动态初始化

java数组的动态初始化,在初始化时给定数组长度, 由系统为元素默认赋值。
java的动态初始化格式 数据类型[] 变量名 = new 数据类型[长度];

public class ArrayInit01 {
	public static void main(String[] args) {
		int[] arr = new int[3];
		// int: 说明数组中的元素是int类型的
		// []: 说明这是一个数组
		// arr: 数组的名称
		// new: 为数组申请内存空间
		// int: 说明数组元素是int类型
		// [3]: 说明数组的长度是3
		System.out.println(arr); // 指针
		System.out.println(arr[0]); // 0
		System.out.println(arr[1]); // 0
		System.out.println(arr[2]); // 0
	}
}

动态初始化,各数据类型系统默认赋值

  • 整数型(byte, short, int): 0
  • 浮点型(float, double): 0.0
  • 字符型(char): 空串
  • 布尔型(boolean): false
  • 引用类型: null
静态初始化

在创建数组时, 直接将数组中的元素确定。
java中数组静态初始化的格式: int[] arr = {1,2,3,4};

public class ArrayInit02 {
	public static void main(String[] args) {
		int[] arr = {1, 2, 3, 4};
		System.out.println(arr[0]); // 1
		System.out.println(arr[1]); // 2
		System.out.println(arr[2]); // 3
		System.out.println(arr[3]); // 4
	}
}

内存分配

程序编写好之后是放在硬盘中, 如果程序要执行,必须放进内存中, 运行完之后会清空内存。JVM(java虚拟机)要运行程序, 必须对内存进行空间管理和分配。

目前只需要掌握栈内存和堆内存的概念。

1.栈内存
方法运行时使用的内存,比如main方法运行,进入方法栈中执行。基本数据类型都直接存储在栈内存中。

2.堆内存
存储对象或者数组,new来创建的,都存储在堆内存。

数组内存的结构

public class ArrayStorage {
	public static void main(String[] args) {
		// new 申请堆内存空间。分配指针,赋值到arr变量
		int[] arr = new int[3] 
		// arr 变量在栈内存空间只存储了指针
		System.out.println(arr);  // 指针
		/* 
			访问数组中的元素步骤:
			1. 通过arr变量的指针访问到堆内存空间
			2. 同过索引访问到元素
		*/
		System.out.println(arr[0]);
		
		/*
			将arr赋值给arr2, 是将arr的指针赋值给arr2
			此时arr和arr2指向同一个堆内存空间。
			改变arr2中元素的内容会同时改变arr的元素
		*/
		int[] arr2 = arr;
		arr2[0] = 999;
		arr2[3] = [999]
		System.out.println(arr[0]); // 999
		System.out.println(arr[3]); // 999
	}
}

解释不够清楚, 可以百度找点图来辅助理解。

数组常见的小问题

  1. 索引越界: 使用了数组中不存在的索引。ArrayIndexOutOfBoundsException
  2. 空指针异常: 数组为null ,指针在堆中找不到空间。NullPointerException
public class ArrayQuestion {
	public static void main(String[] args) {
		int[] arr = {1,2,3,4};
		// System.out.println(arr[5]); 报错
		arr = null;
		System.out.println(arr[0]); // 报错
	}
}

数组的常见操作

  1. 遍历数组: 访问数组中所有的元素, 通常使用循环来完成。 数组名.length: 数组中元素的个数。
  2. 求最大值: 获取数组中最大的数。
public class ArrayTest {
	public static void main(String[] args) {
		int[] arr = {23,43,77,11};
		// 使用for循环遍历数组, 输出所有数组元素
		for(int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		// 判断出数组中最大的数
		int max = 0;
		for (int j = 0; j < arr.length; j++) {
			if (arr[j] > max) {
				max = arr[j];
			}
		}
		System.out.println("数组中最大的数是: " + max);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值