一.数组的语法:定义数组,初始化数组[x][]
1.数组类型:保存一组其他类型的数据,元素类型
int[] /double[]
int[] intArray;//=int intArray[]//规则允许,规范不建议使用
2.数组的初始化//数组长度固定
2.1:静态 int[] array={1,2,3,4,5};//用到已知数组所有元素,不支持修改
int[] array=new int[]{1,2,3,4,5};//给方法传参。构造匿名数组
2.2:动态 int[] array=new int[数组的长度];
//array=new int[10] 存放了10个
2.3:不初始化 int[] array=null;//null 是空引用
3.数组的下标访问[]
3.1 下标类型一定是jint
3.2 取值范围 [0,array.length-1]// 注意下标取异常 ⽣"java.lang.ArrayIndexOutOfBoundsException"异常信息。
4.数组本质也是对象(objiect类的派生类)
4.1属性 对象.属性 array.length
int[] array=...;//传了一组数
array.length;//数组中元素个数就自己知道了;
二.数组模型(引用):可以形象的比喻为通过小盒子里的信息)找到真实数据存放的位置;//就是引导调用的栈中的元素找到真实存放的堆区位置(只有一份)
1.引用类型的变量: 无论引用变量保存在栈上还是堆上,背后的数据(对象)一定是在堆上
模型:
2.解析空间不同:
基本数据类型
引用数据类型
引⽤传递空间:同⼀块堆内存空间可以被不同的栈内存所指向。
3.方法传递:
3.1 无论是基本类型还是引用类型,都是简单的值传递。相当于拷贝了一份实参 到调用的函数(将实参赋给形参)。所以,形参的改变不影响实参
3.2 引用传递时,通过形参引用、修改真实对象(存放在堆中)的值,实参可以感受到变化
3.3 局部变量和参数保存在栈中://参数指的是形参
void main(){
int[] array={1,2,3,4,5};
method1();//调用完后,1,2,3,4,5
method2();//调用完后,1,2,200,4,5
}
void method1(int[] array){
array=new int[10];//引用了另一个数组,没有引用原来的主函数中的数组,
//执行完后,新引用的会被撤销,还是只留下最先引用的主函数
//通过动态方式,将array指向新的数组,不会改变
}
void method2(int[] array){
array[2]=200;//改变了引用函数的值
}