数组是引用类型的变量
1.定义:
数据类型 [] 数组名;如int[] array; 也可以采用C中方式定义int a[],但是不推荐赋值:
初始化时赋值(静态初始化) int[] a = {1,2,3,4,5};缺点:数组长度固定动态初始化 int[] a = new int[5]; //默认值(0的类型含义)如果数组中的元素没有初始化,元素的值就是元素类型的默认值 如 int[] a = new int[] {1,2,3,4,5};2.什么是引用类型? 1)引用类型是个线索,用来找到堆中的真正数据 2)引用类型也是值传递,形参的改变不会影响实参的值
int[] a = null;//只定义了一个数组类型的引用变量,没有数组对象,a没有指向任何数组 int[] a = {1,2,3,4,5}; int[] b = a;//b和a指向数组,若是b[0]=10,则a[0]=10; public static void method1(int[] a){ a = new int[] {11,12,13,14,15};//生成新数组 } public static void method2(int[] a){ a[0]=10;//改变数组的值 } public static void main(String[] args){ int[] a = {1,2,3,4,5}; method1(a);//调用结束后a的值是{1,2,3,4,5},没有改变 method2(a);//a={10,2,3,4,5} } public static void swap(int[] a, int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } public static void main(String[] args) { int[] a = { 1, 2, 3, 4, 5 }; // 交换下标 0 和 下标 3 的数据 System.out.println(a); }
3.变量:形参,局部变量-->栈, 属性-->堆 ,静态属性-->方法区4.java中垃圾回收GC(Garbage Collection) 什么是垃圾?没有引用指向的对象(如数组)
5.编译错误:下标越界 "java.lang.ArrayIndexOutOfBoundsException"异常信息
int [] a = null; a[0] = 100;//数组属于引用数据类型,因此在使用之前一定要开辟空间(实例例化),否则就会产生 NullPoninterException;
6.匿名数组:binarySearch(new int[] {1,2,3,4,5},3)
数组操作:求数组长度 int[] a a.length(是对属性的访问)
求字符串长度 String s s.length()(是对方法的调用)
数组遍历:1)for循环 for(i=0;i<a.length;i++){ a[i]; }
2)foreach形式 for(element : a){ element; } //java版本不同可能不支持 java内存中有3个区域:栈区 ; 堆区 ; 方法区(对象一定存在堆区,变量根据形式不同存放区域不同)
JDK支持的数组操作: java.util.Arrays 包,先导入才能使用import java.util.Arrays java.lang.System 包
7.二维数组的数据类型是引用类型 多维数组存的元素类型是引用,可以有阶梯状的数组(数组列数可以不同)
8.练习代码:包括交换数组元素,查找元素,复制数组,二分查找,数组置为指定值
https://github.com/Consini/JavaSE/blob/master/Course3数组-0718/Course3.java
练习:1)将偶数放在前面,奇数放在后面。
2)旋转数组
public static boolean[] copyOfRange(boolean[] original,int from, int to) //将数组original的从from(包含)到to个元素复制到新数组中,返回的数组长度为to-frompublic static void arraycopy(Object src,// 源数组。 int srcPos,//源数组中的起始位置。 Object dest,//目标数组 int destPos,//目的地数据中的起始位置。 int length)//要复制的数组元素的数量。
3)求数组去掉最大值和最小值后的平均值
4)冒泡排序
https://github.com/Consini/JavaSE/blob/master/Course4数组-0719/Course4.java