数组是可以存储相同类型的一组容器,数组的类型是引用类型,数组名是存放在栈空间的一个地址号,然后数组名就是通过这个地址号指向堆中的一块连续空间,再堆的连续空间里面存放着值。数组的定义类型可以是任意类型,既可以是基本数据类型也可以是引用数据类型,一般来讲我们使用的数组里面的元素,即用数组名【下表号】来表示数组的元素。数组里面指向堆的空间是连续的。
数组有四个要素:数组类型,数组名称,数组长度,数组里面元素的值
数组里面元素跟引用数据类型一样都有默认值,根据数组类型来获得的(注意一下,boolean类型的数组里面默认值是false)
数组常见的异常是 ArrayIndexOutOfBoundsException(下标越界的异常,就是因为你从数组取值的时候输入的下标不在0~length-1这个区间),还有一个NullPointException空指针异常,比如你在给Person[] per = new Person[2];per[1].name;这个时候会发生空指针异常,就是一个空的对象指向这个对象的非静态的属性和方法的时候出现的空指针异常;
数组的定义和使用:1,声明:类型[] 名(此时没有在堆空间开辟长度)2,开辟长度 名=new 类型[长度](此时在堆空间开辟了一块连续的区间)3,赋值:名[下标]=值 4,使用是名[下标];
数组的赋值又分为静态赋值和动态赋值:静态赋值是 类型[] 名= {值1,值2,值3}或者是类型[] 名 = new 类型[]{值1,值2,值3}静态赋值就是声明的时候给赋值。动态赋值是先声明后赋值即 类型[] 名 = new 类型[长度];必须声明长度;然后可以再继续赋值了(一般采用的是循环赋值);要注意一个问题 没有这种声明方式类型[] 名 = new 类型[长度]{值1,值2,值3},这个是错误的
数组常见的算法就是复制,反转,排序Arrays类的常见方法;
复制分两种情况 数组类型都以int类型举例 int[] a = {1,2,3} ; int[] b = a;这个时候是把a这个引用变量的地址给了b,如果这个时候将a[0]等于1从新赋值成a[0]=12;此时b[0] 也是等于12的,即其中一个数组里面的元素发生了改变,另一个数组的元素也会跟着相应的发生改变。还有一个复制是这样的int[] b = Arrays.CopyOf(a,a.length);这种情况的复制是将a数组的元素分别复制给了b数组,b的地址号和a的地址号不一样,他们呢指向堆空间的那块区域也是不一样的,只不过堆空间的这块区域存的数值是一样的
反转就是将数组里面的元素顺序发生一个变化。只要是操作数组我们肯定要遍历数组,再遍历的时候将数组的两个元素颠倒一下,截个图片看一下就可以了
排序这里就说一个冒泡排序,还是一个图片说明吧
对于数组的一些操作还有一个专门的类Arrays,里面的方法基本都是静态的;
copyOf复制数组的元素
sort排序数组升序排列
fill填充数组
equals判断两个数组是否相等(只要里面所有的元素一样就认为相等了)
toString将数组转换成字符串,默认的字符串格式是【值1,值2,值3,。。。。。】