------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
方法重载
同一个类中允许多个同名的方法存在,但参数列表不同
方法的重载和修饰符、返回值没有关系
JVM 根据参数列表调用重载的方法
数组概念 数据类型[] 数组名
存储同一种数据类型的多个元素的集合,也可以看成是一个容器。
数组初始化 为数组中的元素分配内存空间并赋值
静态初始化:在定义数组的同时,直接对数组中的元素赋值
数据类型[ ] 数组名 = new 数据类型[ ] {数组元素1, 数组元素2, 数组元素3...};
注意:静态初始化不能指定数组长度
数据类型[] 数组名 = {数组元素1, 数组元素2, 数组元素3...};
动态初始化:只指定数组的长度,由系统分配初始值
数据类型[ ] 数组名 = new 数据类型[数组长度]; // 数组长度 = 元素个数
动态初始化创建数组后,其元素的初始值:byte、short、int、long为0;
float 和double 为0.0;boolean 为false;char 为\u0000。
引用类型的数组的元素的默认初始值都是 null
Java中数组的内存分配
在堆中为数组对象分配内存,在栈中为引用(堆中对象的内存地址,即指针)分配内存。数组对象在堆中存储,数组变量属于引用类型,存储数组对象的地址信息,指向数组对象。
栈内存和堆内存的区别
存储内容:
栈内存,存储运行方法、局部变量
堆内存,存储的是实体、数组、对象
内存默认值:
栈内存:变量没有默认值,必须手动赋值
堆内存,根据类型不同,都有默认值
生命周期:
栈内存,使用完就被释放,生命相对较短
堆内存,使用完不会被立刻释放,等待 JVM 回收,生命相对较长
数组操作常见的两个问题
数组索引越界ArrayIndexOutOfBoundsException
访问到了数组中不存在的索引时
2.空指针异常
NullPointerException数组引用没有指向实体,却在操作实体中的元素时
char 类型数组
输出数组变量名的时候,出现的不是地址,而是数组中每个元素
println() 默认对 char 数组,进行自动遍历
数组的访问
获取数组的长度 length 属性(final,其值不可改变)
通过下标访问数组元素 0~length-1
数组的操作示例
数组遍历(依次输出数组中的每一个元素)
int[] arr = new int[] { 2, 3, 5, 6 };
for (int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
数组获取最值
// 定义一个变量,记录当前最大值
int max = arr[0];
for (int I = 1; i < arr.length; i ++) {
if(max < arr[i]) {
max= arr [i];
}
}
System.out.println(“max= ” + max);
// 定义一个变量,记录当前最大值的索引
int maxIndex = 0;
for (int I = 1; x < arr.length; x++){
if(arr[maxIndex] < arr[i]){
maxIndex= I;
}
}
System.out.println(“max= ” +arr[maxIndex]);
数组元素逆序
// 利用最大索引和最小索引访问数组元素,和临时变量完成元素的位置交换
for (int min = 0, max = arr.length �C 1;min < max; min ++, max --) {
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
}
// 再遍历输出,查看逆置效果
for (int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
查找指定关键字
// 查找成功,返回第一次出现的索引,否则返回负值
int key = 5;
for (int i = 0; i < arr.length; i++){
if (key == arr[i]){
return 1;
}
}
return -1;
数据传递问题
基本类型传数值,引用类型传地址
引用类型的参数传递问题
被调用函数参数是引用类型,则传递的就是内存地址
实参和形参共享内存数据