数组
定义格式:数据类型[ ] 数组名 = new 数据类型[元素个数或数组长度];
说明数组在创建过程中内存的分配情况
JVM对自己的内存进行了划分,分成了5个区域:
寄存器:内存和CPU之间。
本地方法栈:JVM调用了系统中的功能。
方法和数据共享:运行时期,class文件进入的地方。
方法栈:所有的方法运行的时候,进入的内存。
堆:存储的是容器和对象。
如:int[] x = new int[];
int[] x : 声明了一个变量x,该变量的类型为int[],即一个int类型的数组。变量x会占用一块内存单元,它没有被分配初始值。内存中的状态如下图所示。
new int[] :创建了一个数组,将数组的地址赋值给变量x。在程序运行期间可以使用变量x来引用数组,这时内存中的状态会发生变化,如下图所示
在定义数组时只指定数组的长度,由系统自动为元素赋初值的方式称作动态初始化。
静态初始化:
1、类型[] 数组名 = new 类型[]{元素,元素,……};
2、类型[] 数组名 = {元素,元素,元素,……};
二维数组
数组类型[ ] [ ] 数组名= new 数据类型[行的个数][列的个数];
或者 数据类型[ ] [ ] 数组名;
数组名=new 数据类型[行的个数][列的个数];
如:int[][] arr = new int[3][4];
int[][] arr = new int[3][];
int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};
数组常见问题(最值获取,数组遍历,数组排序)
数组最值
public class ArrayDemo05 {
public static void main(String[] args) {
int[] arr = { 4, 1, 6, 3, 9, 8 };
int max = arr[0]; // 定义变量max用于记住最大数,首先假设第一个元素为最大值
for (int x = 1; x < arr.length; x++) {
if (arr[x] > max) { // 比较 arr[x]的值是否大于max
max = arr[x]; // 条件成立,将arr[x]的值赋给max
}
}
System.out.println("max=" + max); // 打印最大值
}
}
数组遍历
//遍历一维数组
int[] arr1={1,3,5,2,4};
for(int i=0;i<arr1.length;i++){
System.out.println(arr1[i]);
}
System.out.println("------------------");
//遍历二维数组
int[][] arr2={{1,3,5,7,9},{2,4,6,8,10}};
for(int i=0;i<arr2.length;i++){
for(int j=0;j<arr2[i].length;j++){
System.out.println(arr2[i][j]);
}
}
数组异常(数组越界异常和空指针异常)
数组越界异常
每个数组的索引都有一个范围,即0~length-1。在访问数组的元素时,索引不能超出这个范围,否则程序会报错
public class ArrayDemo06 {
public static void main(String[] args) {
int[] arr = new int[4]; // 定义一个长度为4的数组
System.out.println("arr[0]=" + arr[4]); // 通过下标4访问数组元素
}
}
空指针异常
在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现空指针异常
public class ArrayDemo07 {
public static void main(String[] args) {
int[] arr = new int[3];
arr[0] = 5; // 为数组的第一个元素赋值
System.out.println("arr[0]=" + arr[0]);
arr = null; // 将变量arr置为null
System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
}
}
方法
方法定义格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){
执行语句
………
return 返回值;
}
方法的重载
1.必须在同一个类中
2.方法名相同
3.参数列表不同
4.与方法的修饰符无关,与返回值无关
值传递与引用传递的问题
public class OverLoad
{
public static void main(String[] args)
{
//值传递与引用传递的问题
int a=2;
int b=3;
System.out.println(a+","+b);
change(a,b);
System.out.println(a+","+b);
System.out.println("-----------");
int[] arr={2,3};
System.out.println(arr[0]);
System.out.println(arr[1]);
change2(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
}
public static int change(int c,int d){
c=0;
d=0;
return c;
}
public static void change2(int[] a){
a[0]=5;
a[1]=4;
}
}
运行结果: