数组
- 数组的诞生 - 为了解决单个变量只能存储单个值的缺点.
- 数组本身也是属于数据结构[数组,栈,堆,树[红黑树],链表,图…]
- 数组是属于对象类型,数组是存在在JVM内存的堆区,基本类型存储在JVM内存的栈区
- 数组在内存中一定是一块连续的空间.
- 数组的大小[长度,数组中存放的数据的个数]一旦确定了,不能改变.
- 定义数组必不可少的俩个条件 - 元素类型/数组的长度要确定
- 数组容器
语法
1. 元素类型[] 变量名 = new 元素类型[size];//size数组的大小
2. 元素类型 变量名[] = new 元素类型[size];//
元素类型就是数据类型[8种基本数据类型,以及对象类型]
作用 - 元素类型决定了这个数组中可以存放的数据的类型
//arr的数据类型是什么?int[] -> 整数型数组
// "定义一个长度为3的int型数组"
int[] arr = new int[3];
赋值方式
如果定义了数组,但是没有进行赋值操作,那么系统会默认分配一个默认值
默认值根据元素类型来决定了.
byte,short,int,long -> 0
float,double -> 0.0
boolean -> false
char -> 空格
对象类型 -> null
先定义数组,然后通过下标一一赋值
int[] arr = new int[3]; //数组的下标从[0,数组长度-1]范围 //如果下标不在此范围,控制台抛出java.lang.ArrayIndexOutOfBoundsException 数组下标越界异常 arr[0] = 10; arr[1] = 10; arr[2] = 10;
定义数组的同时进行赋值
int[] arr = {3,4,5};
定义数组的同时进行赋值
int[] arr = new int[]{3,4,5};
通过普通for去赋值
int[] arr = new int[3]; for(int i=0;i<arr.length;i++){ arr[i] = (int)(Math.random()*100+1); }
数组的遍历
通过下标一一取值
System.out.println(arr[下标]);
数组提供了属性length - 获取数组的长度
通过普通for循环进行遍历
for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }
使用jdk5.x提供的增强for循环的语法
属于只读的for
int[] arr2 = {3,4,5}; for(元素类型 元素变量:数组变量名){ System.out.println(元素); } for(int e:arr2){//此处的e不是代表下标,就是代表真正的元素 System.out.println(e); }
- 通过java.util.Arrays数组工具类中提供的static String toString(数组对象)来遍历数组
拓展 - 数组的内存
//通过new关键字在Jvm的堆中开辟新的空间01,用来存储这个对象{10,20,30}
//然后将这个对象在堆空间中的内存地址赋值给了引用变量arr1[存储在栈]
//"结论" - arr1的本质不是对象,只是一个引用变量而已
//"结论" - 引用和对象之间的关系
// 引用变量中存储的就是对象在堆空间中的内存地址
// "气球理论" - 一个引用变量在同一个时刻,只能指向一个对象
// - "一个对象可以在同一个时刻被多个引用指向"
int[] arr1 = new int[]{10,20,30};
//通过new关键字在Jvm的堆中开辟新的空间02,用来存储这个对象{10,20,30}
int[] arr2 = {10,20,30};
arr1 = arr2;//arr1和arr2都是指向第二次创建出来的数组对象
//原来第一次创建出来的对象就成为内存中的垃圾对象 - GC[垃圾回收线程进行回收,释放内存]
//"垃圾对象" - 没有任何引用指向的对象
拓展 - 方法的参数传递方式
- 基本类型采用值传递
- 对象类型[引用类型]采用地址传递
总结:**Java中只有值传递,没有地址传递.**比较特殊的是String类型[虽然是一个对象类型,但是具备基本类型传递的特点]
数组工具类
java.util.Arrays
static String toString(int[] arr);//输出数组
static int[] copyOf(int[] original, int newLength)
复制指定的数组,用零截取或填充(如有必要),以便复制具有指定的长度。static void fill(boolean[] flag,boolean value);//给数组赋统一的值.