Java-数组及参数传递
Java数组
1.概念-什么是数组
数组可以理解成在计算机中的多个连续的存储空间,里面可以按顺序存放多个类型相同的数据。
2.语法及使用
2.1数组的使用:
数组连续存储空间
2.2获得数组的基本语法:
数据类型[] 数组名 = new 数据类型[长度];
3.数组的使用
数组也是一个[数据类型]
4.JVM堆栈
4.1.堆:
可以理解为凡是new 出来的东西都放在这里面,堆内存可以被虚拟机动态的分配内存大小,无需事先告诉编译器的数据的大小、生命周期等相关信息
4.2栈:
主要存放一些变量容器名 (例如局部变量名,还可以存放局部变量 基本类型 数据值)
堆栈原理5.数组的特点
1.数据类型限定了数组可以存放的数据类型
2.一个数组可以存储多个元素
3.一旦数组对象被创建好,那么其长度就固定不变了
4.动态创建好数组之后,会自动分配默认值,和数组中的元素类型有关(类似之前成员变量的默认值)
6.常见的错误
//1.错误索引越界
//System.out.println(arr[arr.length]);//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
//遍历
for(int i = 0;i<arr.length;i++){
System.out.println("索引位置:"+i);
System.out.println(arr[i]);
}
//2.空指针异常
int[] ar = null;//arr根本就没有指向一个数组【数组不存在】
//编译不报错:只看类型不看值,不会看到底有没有数组,但是运行一定会看数组在不在【看是否有值】
System.out.println(ar.length);
String str = null;
}
//3)如果有返回值,不知道return写在哪里【数据类型对应.....】
static int[] getArr(){
return new int[10];
}
7.数组的简写
声明的同时赋值//接下来学习中最常用
数据类型[] 数组变量名 = {多个以英文逗号分隔的数据};
8.数组的遍历
class _LxBl {
//数组的遍历(难)
public static void main(String[] args){
//利用简单的方法定义一个数组
int[] arr ={1,2,3,4,5,6};
bianLi(arr);
}
/*思路:
首先想办法将数组中的数一对一的取出来
由于每次只能取出一个数,所以考虑用循环,最好将数组索引设为变量
*/
//不设置返回值,直接在方法中打印
static void bianLi(int[] a){
//为了美观在打印前加一个括号
String num = "[";
//利用for循环,将变量值设定为数组长度减一,由于循环的属性
for (int i = 0; i < a.length-1;i++ ){
num = num+a[i]+",";
}
System.out.print(num);
System.out.print(a[a.length-1]+"]");
}
}
2.参数传递
要理解,参数传递,基本数据类型不能被改变,因为在调用方法时只是复制了一份变量,而不是真正的改变了变量;
而数组能改变,是因为数组作为引用数据类型,储存的是引用地址,在参数改变的时候,地址值虽然没有改变,但是存储的值改变了;
class _11Test {
/*
1.方法参数传递
值传递
值引用
*/
public static void main(String[] args){
int a = 10;//基本数据类型
int[] arr = {66};//引用数据类型
System.out.println(a);//10
System.out.println(arr[0]);//66
//-------------------------------------
changeData(a);
changeData(arr);
System.out.println(a);
System.out.println(arr[0]);//99
}
static void changeData(int a){
System.out.println("int--->"+a);//10
a = 55;
}
static void changeData(int[] a){//传的是什么?
System.out.println("int[]--->"+a);//[I@15db9742
a[0] = 99;
}
}