JavaSE day3:
JavaSE之数组的定义与使用
一、数组
1、基本概念:数组指的就是⼀组相关类型的变量集合,并且这些变量可以按照统⼀的⽅式进⾏操作。
2、数组初始化( 声明并开辟数组):
1)动态初始化(初始值为对应元素类型的默认值)
数据类型[] 数组名称 = new 数据类型[长度];
eg:int[] a = new int[3]; //开辟了一个长度为3的数组a,不建议定义int a[3];
2)静态初始化
eg: int[] a = new int[]{1,2,3}; //开发中建议使用该完整格式
注释:
数组的访问通过索引完成,索引即下标;
如果访问超过索引访问,那么会产生"java.lang.ArrayIndexOutOfBoundsException"异常信息;
若数组未初始化,元素的值就是元素类型的默认值;
在Java中有⼀种动态取得数组长度的方法:数组名称.length;
java中没有取地址&操作,想通过形参改变实参的值只能通过引用
3、引用传递
1)引用类型是个线索,用来找到堆中的真正数据
2)引用类型也是值传递,形参的改变不会影响实参
方法调用过程中(基本数据类型或引用数据类型),java都是值传递
示例代码如下:
int[] x = null;
//只定义了一个数组类型的引用变量,没有数组对象,即a没有指向任何数组
4、数组与方法互操作
用到的java库函数:
import java.util.Arrays; //导入该“包”才能使用
1)Arrays.copyOf(int[] a,int newLength)
public static int[] copyOf(in[] original,int newLength)
复制指定的数组,用零截取或填充(如有必要),以便复制具有指定的长度。对于原始数组和副本都有效的所有索引,两个数组将包含相同的值。对于在副本中而不是原件有效的任何索引,副本将包含0。当且仅当指定长度大于原始数组的长度时,这些索引才会存在。
参数:original -- 要复制的数组; newLength -- 要返回的副本的长度
2)Arrays.toString(int[] a)
public static String toString(int[] a)
返回指定数组的内容的字符串表示形式。字符串表示由数组元素的列表组成,括在方括号( "[]" )中。相邻的元素由字符", "分隔(逗号后跟一个空格)。元素被转换为字符串由String.valueOf(int)。返回"null"如果a是null。
参数; a -- 要返回其字符串表示形式的数组
3)Arrays.fill(int[] a,int val)
public static void fill(int[] a,int val)
将指定的int值分配给指定的int数组的每个元素
参数:a -- 要填充的数组; val -- 要存储在数组的所有元素中的值
4)Arrays.copyOfRange(int[] original,int from,int to)
public static int[] copyOfRange(int[] original,int from,int to)
将指定数组的指定范围复制到新数组中.范围( from )的初始指数必须在零和original.length之间,包括左边界。original[from]的值被放置在副本的初始元素中(除非from == original.length或from == to)。from的范围( to )的最终指数可能大于original.length,在这种情况下0(整数类型的默认值)被放置在其索引值大于或等于(original.length - from)的副本的所有元素中。返回的数组的长度将为(to - from)。
参数:original -- 要从中复制元素的数组;from -- 要复制的范围的初始索引;
to -- 要复制的范围的最终索引,不包括此边界
java.util.System; //无需导入(import)该“包”即可使用
1)System.arraycopy(int[] src,int srcPos,int[] dest,int destPos,int length)
将指定源数组src中的元素从指定位置srcPos复制lengtht个到目标数组dest的指定位置destPos
参数:src -- 源数组; srcPos -- 源数组中的起始位置;
dest -- 目标数组; destPos -- 目标数组的起始位置;
length -- 要复制的数组元素的数量
练习代码如下:
5、数组案例:数据统计
代码如下:
补充:四种形式的变量及存放位置
1)形参 2)局部变量 ----栈区
3)属性 ---堆区
4)静态属性 ---方法区