1.语法
定义数组,初始化数组
- 类型数组,保存一组其他类型的数据,元素类型
int[] int Array
和C语言兼容方式
int intArray[]; - 数组的初始化(数组的长度是固定的)
(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.方法
2.内存模型
数组是遇到的第一个引用类型
数组本质上是引用类型,是对象,和基本数据类型有很大的区别
1.
空间存储的位置
(1)内存
(2)栈(Stack) 堆(Heap)
在栈内:1.局部变量 2.形参(paramaters)
【注】在子函数中不可以修改主函数的变量值,传参数时是值传递,传递参数是一份拷贝内容
2.
数组类型(引用类型 reference)
void main(){
int[] array(栈区) = {1,2,3,4,5}(堆区)
method1(); //数组不变
method2(); // 数组变为{1,2,200,4,5}
}
void method1(int[] array){
array = new int[10];
//array 变成1-10
//引用传递也是值传递
}
void method2(int[] array){
array[2] = 200;
}
*
【注】通过动态方式,将array指向新的数组,引用指向的新位置的改变不会影响实参
默认值: 0的各个类型的表示
byte、short、int、log —— 0
float、double —— 0.0
char —— 0x0000
boolean —— false
reference —— null
【注】
1.局部变量不可以享用默认值
2.不初始化数组每个元素都是默认值
3.类中的属性、静态属性都可以享受默认值
【总结】
1. 方法调用过程中,无论是基本数据类型还是引用数据类型,实参到形参都是值传递,在栈里拷贝了一份。
2. 但引用传递如果改的是对象内部的值,实参 可以感受到变化
3. 引用类型变量:无论引用变量保存在栈上还是堆上,背后的数据(对象)一定是在堆上