数组
1、语法
定义数组,初始化数组
2、内存模型(重点+难点)
遇到的第一个引用类型
数据类型:1>基本数据类型
2>引用数据类型
i>数组类型
ii>对象类型
iii>接口类型
一、 数组类型,保存一组其他类型的数据,元素类型
int[] / double[]
int[] intArray;
double[] doubleArray[];
和C语言兼容的方式(不建议使用)
1> int intArray[];
2> double doubleArray[];
二、数组的初始化 (数组的长度是固定)
1、静态方式 用到已知数组的所有元素
int[] array = {1,2,3,4,5};
int[] array = new int[]{1,2,3,4,5};//给方法传参 匿名数组
2、动态数组
int[] array = new int[数组的长度];
3、不初始化数组,指定一个null字面量
int[] array =null;//null是空引用
三、数组的下表访问,使用括号[]制定具体的下标
1、下标一定是int 类型
2、下表的范围是,数组的长度是n ,则[ 0 ,n - 1]
四、数组本质其实是对象(object类的派生类)
1、属性
int[] array = ......;
array.length; 数组中元素的个数
2、方法
五、数组的本质是引用类型,是对象,的基本数据类型有很大区别
1、int a = 100;
保存在栈:
1、局部变量
2、参数
void print(int a){
System.out.println(a);
}
值传递:
void main(){
int a = 10;
print(a);
}
print 中的a是形参
main中的a是实参
值传递,改变形参不会影响实参,因为值传递本质是复制了一份
2、数组类型(引用类型)
void main(){
int[] array = {1,2,3,4,5};
printArray(array);
}
void printArray(int[] array){
.....
}
void main(){
int[] array = {1,2,3,4,5};
method1(array);
method2(array);
}
void method1(int[] array){
array = new int[10];
//array 变成了1...10
//main中array数组的值没有变化
}
void method2(int[] arrar){
arrar[2] = 200;
//改变了main中array[2]的值,变成了200
}
六、java的数组原生支持java.util.Array
1、toString 打印数组
2、copyOf 复制数组
3、copyOfRange
4、fill 填充值
5、sort | paraelSort
七、默认值
byte/short/int/long 0
float/double 0.0
char 0x0000
boolean false
reference (引用类型) null
变量未初始化是,默认给的值
局部变量无法享受默认值
参数没有默认值
可享受默认值的
数组中的元素
属性
静态属性
八、二维数组
int[][]
int[][] array = new int[][10];
九、总结
数组:数组的长度,一旦建好,不能更改,固定大小
语法:
数组类型
元素类型[]
甚至,元素类型也可以是数组,表现的好像多维数组
初始化
int[] a = null;//引用有但没实际的数组
int[] a = {1,2,3,4,5};//静态初始化
int[] a = new int[]{1,2,3,4,5};//更多用在匿名数组
int[] a = new int[数组长度];//动态初始化
1、 理解引用背后的内存模型
引用类型和基本数据类型的区别
2、 java 粗略的把内存分为了栈(stack)和堆(heap)
栈上:
1、局部变量
2、形参
堆上:对象(数组的对象)
3、方法调用过程中,无论是基本数据类型还是引用数据类型
实参到形参都是值传递,在栈里拷贝一份
但,引用传递,如果更改的是对象内部的值,则实参可以感受到变化
4、调用的过程