访问数组元素进行存储(静态初始化)
(1)直接打印数组名称,得到的是数组对应的内存地址哈希值
int[] array={1,2,3};
System.out.println(array);
(2)访问数组元素的格式,数组名称[索引值]
索引值:就是一个int数字,代表数组中的编号。
【注】索引值从0开始,一直到数组的长度减一为止
访问数组元素进行存储(动态初始化)
(1)动态初始化数组时,其中的元素将会自动拥有一个默认值
数据类型 | 初始值 |
---|---|
整数 | 0 |
浮点数 | 0.0 |
字符 | ‘\u0000’ |
布尔 | false |
引用 | null |
(2)访问数组元素的格式,数组名称[索引值]
(3)数组元素的赋值,数组名称[索引值]=数值;
【注意】静态初始化其实也有默认值,只不过系统马上将默认值替换成了大括号里的数值
java的内存划分
一个数组的内存图
应用时数组的地址值不变
两个独立数组的内存图
两个变量指向一个数组
常见问题
1 数组索引越界异常
数组索引从0开始
int []array={1,2,3};
System.out.println(3);//数组索引越界
2 空指针异常
我们都知道java是没有指针的,这里说的"java指针"指的就是java的引用,我们不在这里讨论叫指针究竟合不合适,而只是针对这个异常本身进行分析。空指针就是空引用,java空指针异常就是引用本身为空,却调用了方法,这个时候就会出现空指针异常。可以理解,成员变量和方法是属于对象的(除去静态),在对象中才存在相对应的成员变量和方法,然后通过对象去调用这些成员变量和方法。对于空指针来说,它不指向任何对象,也就没有所谓的成员变量和方法,这个时候用它去调用某些属性和方法,当然会出现空指针异常。
int[] array=null;
System.out.println(array[0]);
数组必需new初始化才能使用其中的元素,如果只使用一个null那么将会发生空指针异常
数组的应用
1 获取数组的长度:
格式:数组名称.length;
将会得到一个int数字,代表数组的长度;
注意 数组一旦创建,程序运行期间,长度不可改变;
右边的int[3]才是数组,左边a只是一个代号
int a[]=new int[3];
2 数组的遍历输出
遍历数组就是对数组当中的每一个元素进行逐一,挨个输出,默认的处理方式就是打印输出
int[] array={1,2,3};
for(int i=0;i<=array.length-1;i++)//for(int i=0;i<array.length;i++)
{
System.out.println(array[i]);
}
3 求出数组当中的最大值
int[] array={1,2,3};
int max=array[0];
for(int i=1;i<array.length;i++)
{
//如果当前元素,比max更大,用它替换max
if(array[i]>=max)
{
max=array[i];
}
System.out.println("最大值"+max);
同理可得最小值;
4 数组元素反转
由 【1,2,3,4】变为【4,3,2,1】
数组元素的反转其实是对称位置的交换
int[] array={1,2,3};
int min=0;
int max=array.langth-1;
for(min,max;min>=max;min++,max--)
{
int temp=array[min];
array[min]=array[max];
array[max]=temp;//首尾相接
}
5 数组作为方法参数_传递地址
数组作为方法参数传递,传递的参数是数组内存的地址。
public static void printArray(int[] array)
{
for(int i=0;i<array.langth;i++)
{
System.out.println(array[i]);
}
}
方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值.
6数组作为方法返回值_返回地址
如果一个方法当中产生了多个结果数据进行返回,使用一个数组作为返回值类型
public static int[] test(int a,int b,int c)
{
int sum=a+b+c;
int avg=sum/3;
int result[]={sum,avg};
return result;
}