Java学习回忆录-基础语法-006

Java学习回忆录-基础语法-006

数组

数组是一种容器, 装数据的. 变量一次只能存储一条数据,而数组可以存储多条数据.。
严谨: 数组多个数值(类型一样的) 。

// 语法:
// 声明数组
String names[];
// 数组初始化
names = new String[4];
// 声明加初始化一步到位
String names = new String[4];

数组的申明:

  1. 数组类型[ ] 数组名 ;
    ​ 数组名 = new 数组类型[数组大小];

  2. 数据类型[ ] 数组名 = new 数据类型 [数组大小]

  3. 数据类型[ ] 数组名 = {数据1,数据2…}

1. 定义一个数组:

​ 数据类型[ ] 数组名;

初始化一个数组

​ 数组名 = new 数据类型[数组大小];

2. 在定义的时候就初始化:(动态初始化)

​ 数据类型[ ] 数组名 = new 数据类型[数组大小];

3. 在定义的同时就赋初值(静态初始化)

​ 数据类型[ ] 数组名 = {数据1,数据2…}

获取数组的最大长度:

数组名.length

数组理解:

数据类型[ ] 数组名 = new 数据类型 [数组大小]
左边:声明数组
int[] arr
	arr: 数组的名字
	int : 数组中存储元素(数据)的类型
		[] : 规定这是一个数组. 
	如果你不添加[],int arr; 就会变为一个普通的变量
	只是声明了一个数组,还不存在的.
右边
	new 操作符,会在堆内存中开辟空间,空间多大. (多大内存需要明确)
	new int : 确定了存储的元素是int的, 
	int[3]: 确定了存储的数据的个数是3个,内存至少需要12个字节... 
	new 操作符在堆内存中开辟空间(数组)时,会对每一个位置进行编号,这个编号称之为角标(索引)。
	new 操作符在堆内存中开辟空间(数组),会对每一个位置初始化一个默认值, 存储的是int 值,默认是0。
	new 操作符在堆内存中开辟空间(数组),分配一个地址值. 通过地址值可以确定这个数组的位置.就可以操作数组。并且new 操作符会将这个数组的地址值,赋值给arr。左边和右边就建立联系。

数组操作:

1. 取出数组中的元素
数组名[角标]

2. 给数组中指定位置赋值
数组名[角标]=数值; 

数组的内存分析

内存:
	java 程序在运行时,会分配内存, 为了提升程序运行的速度,将内存细分,不同区域的内存内部存储和处理数据的方式不同. 
栈内存
    局部变量就在栈内存. 到今天为止,我们定义的变量都是局部变量,都在栈内存中... 
    局部变量,使用前必须要初始化(栈中) 
堆内存
    new 出来的,是在堆内存中. 
    数组: 就是在堆内存中. 
数组内存的分析
栈内存:
    数组名字
堆内存:
    真正的数组. 
    数组名和数组通过地址值建立的联系. 

数组的常见问题

问题一:
	数组角标越界
	ArrayIndexOutOfBoundsException 
	导致问题的原因: 操作数组时,方位了不存在的角标. 
问题二:
	空指针异常
	NullPointerException 
	导致问题的原因: 数组没有初始化,或者数组名存储的是null. 

注意:

定义一个方法前需要分析它的返回值和他的参数列表
当定义一个数组时,只要定义了它的长度,无论有没有赋值,它的长度就不再为0;
定义一个int型的数组时,它的默认值为0,double类型的默认值是 0.0
定义一个String类型的数组时,它的默认值是null
很奇怪,char类型的数组竟然没有默认值,但是有数组长度,输出是一片空白
char类型的数组它的默认值是 /u0000,实际输出来的是一个空格。

数组的长度可以定义为 0;....这个是没有意义的,虽然可以定义,但是没有访问的区间,所以毫无用处。

字符串的比较不能用 == ,要用String类中的equals();

equals方法使用规则:

要比较的字符串 . equals(要比较的字符串);

char数组直接打印数组名会输出整个数组。

猜你喜欢

转载自blog.csdn.net/xxydzyr/article/details/86769981