数组
数组的定义
- 数组:引用类型的变量
- 变量 : 数组类型的引用
- 堆上 : 实际存储数组对象
定义语法
int [] a;
int a[]; //非常不建议
赋值
int[] a={1,2,3,4,5};
int[] a=new int [5]; //默认值 0; //0的 类型含义
int [] a=null; //只定义了一个数组类型的引用变量
//没有数组对象
// a 没有指向任何数组
如果数组中的元素没有初始化,元素的值就是元素类型的默认值;
int[]a=new int[]{1,2,3,4,5};
数组的操作
- 根据下标访问对应的元素 例如:a[index]————( 0<=index<length)
- 获取数组长度 --------------->a.length
- index 类型 int类型
理解什么是引用(变量的引用类型)
- 引用是用来找到实际对象的线索
- java 内存中有3个区域
1)栈
2)堆
3)方法区 - 4种形式的变量
形参 栈 int[]a=null;
局部变量 栈 int[]a={1,2,3,4,5};
属性 堆 int[]b=a;
静态属性 方法区 b[0]=10; a[0]=?
- 方法调用过程中(无论是基本数据类还是引用数据类型),java都是值传递,所
有形参的改变都不会影响实参 。 - 一些操作的理解
int []a={1,2,3,4,5};
int []b=a; // b也指向a指向的数组对象
b=new int[]{10,11}; //b重新指向新的数组对象,不会影响a和a指向的对象
b[0]=100; //改变的是b指向的数组对象的内容不会影响a
引用重点:
1.引用就是一条线索,指向存放在堆中的真实数组数据;
2.方法调用过程中,引用也是值传递,形参的改变不会影响实参;
即:
1.引用类型是个线索,用来找到堆中的真正数据;
2.引用类型调用也是值传递,形参的改变不会影响实参;
public static void method(int []a)
{
a=new int[]{10,11,12,13,14};
}
public static void main(String [] args){
int [] a={1,2,3,4,5};
method(a);
//a[]={1,2,3,4,5}
}
public static void method(int []a){
a[0]=10;
}
public static void main(String[] args){
int []a ={1,2,3,4,5};
method(a);
//a[]={10,2,3,4,5};
}
java支持的一些数组操作
//java util.Arrays 包
//先导入才能使用
import java.util.Arrays;
System.lang.System 包
//数组拷贝
System.arraycopy (源数组引用,源下标,目标数组,目标下标,长度);
Arrays.copyOf(int []a,int newlength);
Arrays.copyOfRange(int[]a,int from,int to);
//填充函数
Araays.fill(int []a,int v);
//toString:返回指定数组的内容的字符串表示形式
//a为数组,用此函数输出
Arrays.toString(a);
//数组二分查找
Arrays.binarySearch(int []a,int v);
java中垃圾回收
没有引用指向的对象(数组)
1)垃圾回收,什么是垃圾,没有引用指向对象就是垃圾(不保证会立即回收);
2)int [] a = null; a引用没有指向任何数组
数组的遍历
int[]a={1,2,3,4,5};
for (int i=0;i<a.length;i++)
{
a[i];
}
for (int element:a)
{ //foreach 形式 老版本不支持
element;
}
常见的错误:
- Arrary index Out of Bounds Exception 下标越界;
- int [] a=null; a[0]=100; NullPointerException;
- 多维数组的了解:
java中多维数组存的元素类型都是引用,所以可以有阶梯状数组