JAVA基础_数组&数组内存分配

数组的初始化
A:数据类型 [ ] 数组名; 举例:int [] arr;
B:数据类型 数组名 [ ]; 举例:int arr[];
动态数组初始化
数据类型[] 数组名 = new 数据类型 [数组长度];

int[] arr = new int[10];

静态初始化
数据类型[] 数组名 = new 数据类型 []{元素1,元素2,…};
数据类型[] 数组名 = {元素1,元素2,…};
长度以元素个数决定

int[] arr = new int[ ]1234int[] arr2 = {5,6,7};

数据类型[] 数组名 = new 数据类型 [数组长度]{元素1,元素2,…最大个数};
长度以数组长度决定,没有赋值的元素默认为0

int[] arr = new int[5]1234

获取数组中元素值
按照数组下表索引获取
索引从0开始到数组长度减1结束
例如:

int[] arr = new int[][1,3,5,7,9];
System.out.println(arr[0]);  //1
System.out.println(arr[1]);  //3
System.out.println(arr[3]);  //7
System.out.println(arr[4]);  //7
System.out.println(arr[5]);  //运行时报错,超出数组长度(数组索引越界异常)

java中的内存分配

堆栈的区别:
栈存储的是局部变量,就是定义在方法的变量,使用完毕,立即回收。
堆存储的是new出来的东西,实体对象。每一个对象都有地址值,每一对象的数据都有默认值
如:
byte,short,int,long为0,
float,double为0.0,
char为 ‘\u0000’
boolean 为 false
引用类型 为null
堆内存数据使用完毕后,会在垃圾回收器空闲的时候背回收。
在这里插入图片描述
一个数组的内存分布
在这里插入图片描述

两个数组指向同一个堆内存的内存图
如果两个数组拿的是同一个堆内存的地址,任何一个数组对堆内存数组进行修改,另一个访问到的也跟着修改

数组操作的两个小问题

  1. 数组索引越界:数组的下标索引超过了数组长度
  2. 空指针异常:数组为空时或者已不指向堆内存地址时,访问数组元素时产生
int[] arr = new int[3];
arr = null;
System.out.println(arr[1]);//运行时报错,空指针异常

遍历数组

int[] arr = new int[][1,2,3];
for(int i = 0; i <3; i++){
   System.out.println(arr[i]);
}
//输出  1
 //     2
   //   3

不死神兔案例
需求:一对兔子3个月后开始每个月生一对兔子,刚出生的兔子3个月后开始每个月生一对兔子,假如兔子不死,问20个月之后总共有多少对兔子
分析:第1个月:1对
第2个月:1对
第3个月:2对
第4个月:3对
第5个月:5对
第6个月:8对

第3个月开始后一个月等于前两个月数字之和

public static void main(String[] args) {
		int[] arr = new int[20];          //定义数组记录每个月的兔子数目
		arr[0] = 1;
		arr[1] = 1;						   //前两个月兔子对数初始化
		
		//for循环初始化3月到第20个月的兔子对数
		for (int i = 2; i < arr.length; i++) {
			arr[i] = arr[i-1] + arr[i-2];
		}
		
		
		System.out.println("第20个月的兔子总数为"+arr[19]);
		
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值