数组
堆上:实际存储数组对象
变量:数组类型的引用
定义语法
int [ ] a;
int a [ ]-----------非常不建议
赋值
int [ ] a = { 1,2,3,4,5 };
int [ ] a = new int[5];//元素的值是0,因为是取 int 的默认值
int [ ] a = null; //只定义了一个数组类型的引用变量
如果数组中的元素没有初始化,元素的值就是元素类型的默认值
int [ ] a = new int [ ] { 1,2,3,4,5 };
找到数组的线索
变量四种
形参-----------栈------------int [ ] a = null;
局部变量-----栈------------int [ ] a = { 1,2,3,4,5};
属性-----------堆------------int [ ] b = a; //若把b的0改成10,则a的0也变为10
静态属性-----方法区-------b[0] = 10; a[0] = 10;
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);
}
public static void method(int [] a) {
a[0] = 10;
}
public static void main(String[] args) {
int [] a = {1,2,3,4,5};
method(a);
}
//引用的方法调用也是值传递
//形参的改变不会影响实参
1、引用类型是个线索,用来找到堆中的真正数据
2、引用类型也是值传递,形参的改变不会影响实参
int [] a = {1,2,3,4,5};
int [] b = a;
b = new int [] {10,11};
java中垃圾回收(Garbage Collection)
Garbage Collector (GC)
垃圾--------没有引用指向的对象就是垃圾 (不保证会立即回收)
没有使用价值;没有引用指向的对象(数组)
int [] a=null;-----------a引用没有指向任何数组
数组的操作:
根据下标访问对应的元素,a[index] ( 0<=index<length)
遇到的异常有--------------NullPointerException/ArrayIndexOutOfBounds
获取数组的长度 a.length
遇到的异常有--------------NullPointerException
理解什么是引用
引用是用来找到实际对象的线索
java内存中有三个区:栈区,堆区,方法区
4种形式变量:
- 形参 --------------栈区
- 局部变量 --------栈区
- 属性 --------------堆区
- 静态属性 ------- 方法区
一些操作的理解
int [ ] a = {1,2,3,4,5};
int [ ] b = a; ------------------------- //b 也指向 a 指向的对象数组
int [ ] b = {10,11,12}; ------------- //b 重新指向新的对象数组,不会影响 a 和 a 指向的对象
b[0] = 100; -------------------------- //改变的是 b 指向的数组对象的内容,会影响 a
方法调用过程中(无论是基本数据类型还是引用数据类型)
java 都是值传递,所有形参的改变都不会影响实参
java 中的多维数组存在的元素类型是引用,所以可以有阶梯状的数组
JDK 支持的一些数组操作
java.util.Arrays 包
先导入才能使用
import java.util.Arrays;
java.long.System 包
System .arraycopy(源数组引用,源下标,目标数组引用,目标下标,长度);