day04

day04 数组

**容器:**是将多个数据存储到一起,每个数据称为该容器的元素。

1.1数组

**数组的概念:**数组就是存储数据长度固定的容器。保证多个数据的数据类型要一致。

1.2数组的定义
1.2.1动态的定义方式:

定义格式:

数据类型[] 数组名 = new 数据类型[数组的长度]
  • 数组定义格式刷的详解

    • 数组存储的数据类型:创建数组容器可以存储什么类型的数据。

    • [ ]表示数组。

    • 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。

    • new关键字:创建数组使用的关键字,在内存中开辟一块空间。

    • 数据类型:和前边的数据类型保持一致。

    • [长度]:数组的长度,表示数组容器中可以存储多少个元素。

    • **注意:**数组有定长的特性,长度一旦被指定,不可以被改变。

举例:

int[] arr = new int[3]
1.2.2静态定义数组的方式:

基本格式:

数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3};

举例:

int[] arr = new int[]{11,22,33};

简化格式:

数据类型[] 数组名 = {元素1,元素2,元素3};

举例:

int [] arr ={11,22,33};
1.3数组的访问:
  • **索引:**每一个存储到数组的元素,都会自动的拥有一个编号,且从0开始,这个自定编号称为数组索引,可以通过数组的索引访问到数组中元素。

  • 格式:

数组名[索引];
  • **数组长度的属性:**每个数组都具有长度,而且是固定的,java中赋予了数组的一个属性,可以获取到数组的长度,语句为:数组名.lenght,属性length的执行结果是数组的长度,int类型结果。因此,数组的最大索引值为length-1
public static void main(String[] args){
    int[] arr = new int[]{11,22,33,44,55};
    System.out.println(arr.length);//输出的结果为5
}
  • 索引访问数组中的元素:
    • 数组名[索引]=数值,为数组中的元素赋值。
    • 变量 =数组名[索引],获取出数组中的元素

2.数组原理内存图(重点)

2.1内存概述

内存是计算机中的重要原件,零时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运作的,必须放进内存中才能运作,运作完毕后会清空内存。

2.2java虚拟机的内存划分

​ JVM的内存划分:

​ 寄存器:给CPU使用,和我们的开发无关。

​ 本地方法栈:JVM在使用操作系统功能的时候使用,和开发无关。

​ 方法区:存储可以运行的class文件。

​ 堆内存:存储对象或者数组,new来创建的,都存储在堆内存中。

​ 方法栈(栈):方法运行时使用的内存,比如main方法运行时,进入方法栈中执行。

2.3数组在内存中的存储
public ststic void main(Stinr[] args){
	int[] arr = new int[3]{11,22,33};
	System.out.println(arr);//打印出来的数组在内存中地址
}

解析:以上方法执行,输出的结果是[I@5f150435,这个是数组在内存中的地址。new出来的内容,都是在堆内存中存储的,而方法中变量的arr保存的是数组的地址。

图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9PMngPBN-1610628035954)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\1610605944125.png)]

public static void main(String[] args){
    int[] arr = new int[3];
    int[] arr2 = new int [2];
    System.out.println(arr);
    System.out.println(arr);
}

动态定义数组的内存图解:

public class ArrayDemo01{
	public class void main(String[] args){
	int[] arr = new int[3];
	
	System.out.println(arr);
	System.out.println(arr[0]);
	System.out.println(arr[1]);
	System.out.println(arr[2]);
	
	arr[0] = 100;
	arr[2] = 300;
	
	System.out.println(arr);
	System.out.println(arr[0]);
	System.out.println(arr[2]);
	System.out.println(arr[3]);
	}
}

图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1oINZDW-1610628035956)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\1610606218781.png)]

静态初始化数组的内存图解:

public class ArrayDemo02{
	public static void main(String[] args){
	int[] arr = {11,22,33};
	
	System.out.println(arr);
	System.out.println(arr[0]);
	System.out.println(arr[1]);
	System.out.println(arr[2]);
	}
}

图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTwBMSVe-1610628035957)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\1610606947848.png)]

两个数组指向同一个内存地址值的内存图:

public class ArrayDemo03{
	public static void main(String[] args){
	int[] arr01 = new int[3];
	System.out.println(arr01);
	System.out.println(arr01[0]);
	System.out.println(arr01[1]);
	System.out.println(arr01[2]);
	
	int[] arr02 = arr01;
	
	System.out.println(arr02);
	System.out.println(arr02[0]);
	System.out.println(arr02[1]);
	System.out.println(arr02[2]);
	arr02[0] = 100;
	arr02[2] = 300;
	
	System.out.println(arr02);
	System.out.println(arr02[0]);
	System.out.println(arr02[1]);
	System.out.println(arr02[2]);
	System.out.println(arr01);
	System.out.println(arr01[0]);
	System.out.println(arr01[1]);
	System.out.println(arr01[2]);
	
	}
}

图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IodoU5gL-1610628035960)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\1610607281881.png)]

数组不可改变行的内存图:

public class ArrayDemo04{
	public static void main(String[] args){
		int[] arr = new int[3];
		
		arr = new int[5];
	}
}

图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMwS1OB0-1610628035961)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\1610607567762.png)]

1610628035960)]

数组不可改变行的内存图:

public class ArrayDemo04{
	public static void main(String[] args){
		int[] arr = new int[3];
		
		arr = new int[5];
	}
}

图解:

[外链图片转存中…(img-VMwS1OB0-1610628035961)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值