目录
数组
数组的扩容
数组的长度固定
扩容实际上底层通过新建空间来实现
一*自己编写扩容代码
定义新数组 长度为扩容后数组长度
将原数组的元素复制到新数组中
将新数组地址赋值给原数组的变量
二*Syatem.arraycopy方法
arraycope(Object src, 原数组的名称
int srcPos, 原数组的开始元素的下标
Object dest, 目标数组的名称
int destPos, 目标数组的开始元素
int length 复制元素的个数
)
三*Arrays.copyof
Arrays.cope of(
int[] original, 原数组的名称
int newLength 扩容以后的长度
)
二维数组
定义 :
格式一 :
数据类型[ ] [ ] 二维数组名 = {{ 元素1 1,元素1 2,元素1 3...},{元素2 1 ,元素2 2,.. },{ }... };
例如
int[][] ages = {{18,20},{21,33.54}};
ages二维数组包含了2个元素
第一个一维数组包含2个元素
第二个一维数组包含3个元素
格式二 :
数据类型[][] 二维数组名 = new 数据类型[一位数组的个数][每个一维数组中元素的个数];
例如 :
int[][] ages = new int[2][2];
每一个一维数组的元素个数都是相同的
数据类型[][] 二维数组名 = new 数据类型[一位数组的个数][];
例如
int[][] ages = new int[2][];
两个一维数组包含的元素个数是没有给定的
二维数组的基本操作 :
下标
一维数组的下标
一维数组元素的下标
1* 获取第一个一维数组的第一个元素
数组名[0][0]
第一个0表示第一个一维数组的下标
第二个0表示第一个一维数组的第一个元素的下标
方法
引出
数组遍历的for循环的代码可以重复使用
java提供方法可以使用代码的复用
概念
可以完成指定功能的一段代码逻辑 可以重复使用
定义
权限修饰符 静态修饰符 返回值类型 方法名( 参数列表){
方法体 :
return 返回值;
}
权限修饰符 : public
静态修饰符 : 可有可无 目前写的方法需加static
返回值数据类型 :
基本数据类型
引用数据类型
void--方法没有返回值
方法名 :
标识符
第一个单词小写 从第二个单词开始大写
参数列表
格式
数据类型1 参数名1,数据类型2 参数名2,....
方法体
方法的代码块
return返回值
如果返回值类型为void,则无法通过return返回具体数据
如果指定了返回值类型,则return后边的返回值类型必须和指定的类型匹配
通常放在方法的最后 return语句执行 方法结束
位置
类中方法外
注意
方法定义不会执行,方法被调用才会执行
方法的调用
方法名(参数)
案例
定义方法,实现一维数组的遍历 --有参数列表 没有返回值
定义方法 一维数组求和
形参与实参
形参 : 形式参数
方法定义时 给出的参数就是形参
实参 : 实际参数
方法调用时 实际传入的参数就是实参
基本数据类型
实参传递给形参的是具体的数据值
引用数据类型
实参传递给形参的是地址值
方法重载 :
方法名相同 参数列表不同
参数列表不同
数据类型不同
数据类型顺序不同
数据个数不同
调用方法时如何确定调用哪一个方法
跟实参类型最像的重载方法(主要参考参数列表)
例如 :
Arrays.toString
Arrays.sort都是方法重载的体现
方法调用栈
方法一旦执行,直到方法被执行完,才会回到调用方法位置,继续向后执行
方法调用不能成环 ,运行会抛出异常--栈内存溢出错误
方法的递归
方法自己调用自己
注意
一定要给出递归结束的条件,否则还会出现栈内存溢出错误
优点
简洁 思路顺
缺点
内存占用率高