首页 > 代码库 > JAVA学习第四课(数组)

JAVA学习第四课(数组)

数组:

同一类型数据的集合,即一种容器。

定义方式:

int[] atrr = new int[5];//int 型数组 数组名arr ,new动态开辟  int[5],数组大小为5,只能存放5个元素,

下标0-4


数组定义后在内存中的基本分布:

内存的划分:

1.寄存器 -> CPU

2.本地方法区,与所在系统相关

3.方法区

4.栈内存:
       存储的都是局部变量,且变量所属的作用域一旦结束,当前变量就会自动释放,所以
       栈内存更新速度很快,因为栈内变量的生命周期都很短(结束就释放)。
例如:局部代码块,其限定局部变量的生命周期,在某些大程序里,main函数不结束

其中的变量就不释放,所以引用局部代码块。

示例代码:

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;

public class Main 
{
	public static void main(String[] args)
	{
		int[] arr = new int[6];
	
		System.out.println(arr[1]);
	
	
		{//局部代码块,在{}中age有效,{}执行玩age自动释放
			int age = 3;
			System.out.println(age);
		}
	
		System.out.println();
	}

}

5.堆内存:、

堆中存储的是对象(数组),凡是new建立的都在堆中,堆不会随时释放,堆中存储实体,实体中装载数据,数据中一个损坏,其他的数据依然可以用。而栈一个数据损坏,其他的都不使用

特点:

1.堆中每一个实体都有首地址值。


2.堆内存中每一个局部变量都有默认的初始化值,根据类型的不同,初始化值也不同,例如:int型是0,float 是0.0f\0.0,
boolean 是false,char 比较特殊 ‘\u0000‘,\u  转义,unicode

3.释放方式:垃圾回收机制

如图:                                                     x = y;


null:


当不想使用arr实体时,arr是数组,若想让arr不做任何实体指向,arr = null,但是堆不会释放arr的地址,


将其视作垃圾。堆里面的垃圾是在不定时自动回收垃圾,故java在内存管理方面优于C++。

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;


public class Main 
{
	public static void main(String[] args)
	{
		int[] arr = new int[]{1,1,1,1,1,1};
	
		System.out.println(arr[1]);
		
		arr = null;//当引用型变量没有任何实体指向时,还引用该实体,就会引发异常
	
		System.out.println(arr[2]);
	
	}
}

数组使用小练习:

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;


public class Main 
{
	public static void main(String[] args)
	{
		int[] arr = new int[5];
		int [] b = new int[5];
		arr[0] = 5;
		b[0] = 6;
		b[3] = 15;
		
		System.out.println("arr[0] = "+arr[0]);
		System.out.println("arr[3] = "+arr[3]);

		arr = b;//更改arr的指向

		System.out.println("arr[0] = "+arr[0]);
		System.out.println("arr[3] = "+arr[3]);
		System.out.println("b[3] = "+b[3]);
		System.out.println("b[0] = "+b[0]);

		b = null;//b无指向

		System.out.println("arr[0] = "+arr[0]);
		System.out.println("arr[3] = "+arr[3]);
		//System.out.println("b[3] = "+b[3]);以视为垃圾
		//System.out.println("b[0] = "+b[0]);
	}
}


使用数组容易遇见的小问题


import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;


public class Main 
{
	public static void main(String[] args)
	{
		int[] arr = new int[5];
		int [] b = new int[5];
		
		System.out.println(arr);//[I@15db9742,15db9742是arr存储的哈希值,[->数组,I -> int型

		//所以,在我们不知道,当前实体是什么类型的实体时,就可以直接当前该实体的名字
		
	}
}


JAVA学习第四课(数组)