Java学习(五)一维数组、二维数组、递归

Java学习(五)一维数组、二维数组、递归

数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。



前言

数组在编程中应用广泛,在javaz中数组和局部变量的存储的数据区域不同,要注意区分


一、一维数组

数组概念:数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型

数组概念

  • 定义格式:
    格式1: 数据类型[] 数组名; int[] a;
    格式2: 数据类型 数组名[]; int a[];

  • 数组的初始化
    Java中的数组必须先初始化,然后才能使用。
    所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值

  • 动态初始化
    只指定长度,由系统给出初始化值
    数据类型[] 数组名 = new 数据类型[数组长度];
    举例: int[] arr = new int[3];

  • 静态初始化
    给出初始化值,由系统决定长度
    这两种方式,只能使用一种,不能进行动静结合

Java中的内存分配以及栈和堆的区别

  • Java虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域

栈: 存放的是局部变量
局部变量:在方法定义中或者方法声明上的变量都是局部变量。

堆: 存放的是所有new出来的东西
特点:
a: 每一个new出来的东西都会为其分配一个地址值。
b: 每一个变量都有一个默认的值
byte,short,int,long 为 0
float,double 为 0.0
char 为 ‘\u0000’ 空格
boolean -为false
引用数据类型 为 null
c: 使用完毕就变成了垃圾,等待垃圾回收器对其回收

方法区:
本地方法区:(和系统相关)
寄存器:(cpu使用)

  • 如图:

    画三个一维数组的内存图

这个图只是简单的画了方法区、堆内存、栈内存,先是主方法main加载到方法区,进入栈运行。代码中先new数组arr1,new的都在堆区,分配地址值0x001,有两个区域,初始化值为0;再赋值15、20。再new数组arr2,分配地址值0x002,有两个区域,初始化值为0;再赋值33、89。将arr1的地址值赋给arr3,arr3,指向0x001,再修改0x001的第一个数据为500,main方法全部执行完出栈。这时候arr1[0]和arr3[0]都是500。

数组操作的两个常见小问题越界和空指针

a:ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
b:NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素

示例;

class ArrayDemo6 {
   
	public static void main(String[] args) {
   
		//数组有一个自带的属性,叫做length属性,这个属性可以获取数组的长度
		int[] arr=new int[10];
		int len=arr.length;

		int[] arr2={
   20,30,60};
		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值