方法/函数
方法的定义:
实现特定功能的一段代码,可反复使用。
方法的调用:
调用方法时,会优先执行方法内部代码,结束后,返回到方法调用处,继续向下执行。
形参与实参:
//定义语法:
public static void 方法名称(形式参数){
方法体
}
//调用
方法名称(实际参数);
返回值与返回值类型
-
概念:方法执行后的返回结果。
-
方法执行后,一些情况下无需返回结果;另一些情况下则必须返回结果。
-
定义语法:
public static返回值类型方法名称(形式参数列表){
//方法主体
//规定返回值的具体类型(基本、引用、void)
//根据需求返回一个结果(值)。
return value;//返回值
}
- 调用语法:
变量=方法名称();
变量类型与返回值类型一致。
return关键字
- return的两种用法:
- 应用在具有返回值类型的方法中:
- return value;//表示结束当前方法,并伴有返回值,返回到方法调用处。
- 应用在没有返回值类型(void)的方法中:
- return; //表示结束当前方法,直接返回到方法调用处。
- 应用在具有返回值类型的方法中:
递归
定义:
-
解决具有既定规律的问题时,在方法内部再次调用自身方法的一种编程方式。
-
何时使用递归?
- 当需要解决的问题可以拆分成若干个小问题,大小问题的解决方式相同,方法中自己调用自己。
- 使用循环解决的常规问题,都可以替换为递归解决。
-
如何正确使用递归?
- 设置有效的出口条件,可以让调用链上的每个方法都可以正确返回,避免无穷递归。
递归案例
阶乘:
数组
数组的概念:
- 概念:一组连续的存储空间,存储多个相同数据类型的值。
数组的组成:
1.数据类型 2.数组名(变量名)3.数组是下标(元素)4.数组的长度
数组创建的四种方式:
- 先声明、再分配空间:
数据类型[数组名;
数组名= new数据类型[长度];
-
声明并分配空间:
- 声明并赋值(繁)∶
数据类型[数组名= new数据类型[{value1,value2,value3,.};
-
声明并赋值(简)(常用)∶
数组的扩容:
复制方式:
- 循环将原数组中所有元素逐━赋值给新数组。
- System.arraycopy(原数组,原数组起始,新数组,新数组起始,长度);
- java.util.Arrays.copyOf(原数组,新长度);//返回带有原值的新数组。
数组的合并:
案例:
// 合并数组
public static void main(String[] args) {
int[] arr = { 21, 42, 56, 29, 97, 26 };
int[] arr2 = { 6, 68, 18, 28, 58 };
// 先计算出合并后数组的长度:
int[] arr3 = new int[arr.length + arr2.length];
// 方式一:利用System.arraycopy
// System.arraycopy(原数组,原数组起始,新数组,新数组起始,长度);
System.arraycopy(arr, 0, arr3, 0, arr.length);
System.arraycopy(arr2, 0, arr3, arr3.length - arr2.length, arr2.length);
for (int i = 0; i < arr3.length; i++) {
System.out.println(arr3[i]);
}
// 方式二:
// 将第一个数组的所有值 复制给第三个数组
for (int i = 0; i < arr.length; i++) {
arr3[i] = arr[i];
}
for (int i = 0; i < arr3.length; i++) {
System.out.println(arr3[i]);
}
int j = 0;// 初始化第二个数组的下标
// int i = arr.length 此处arr.length 指的是第一个数组的长度
// 由于数组长度为7,第一个数组最后一个下标为6。即第二个数组合并起始长度为7,即arr.length
// i < arr3.length 即第三个数组的长度,因为第三个数组的长度是第一个第二个数组之和
for (int i = arr.length; i < arr3.length; i++) {
arr3[i] = arr2[j];
j++;
}
}
地址替换
可变长参数
- 概念:可接收多个同类型实参,个数不限,使用方式与数组相同。
- 语法:数据类型...形参名//必须定义在形参列表的最后,且只能有一个。
二维数组
- 概念:一维数组中的一维数组;数组中的元素,还是数组。
创建语法:
- 先声明、再分配空间:
数据类型[][数组名;
数组名= new数据类型[高维长度][低维长度]; - 声明并分配空间:
数据类型数组名=new数据类型[高维长度][低维长度]; - 声明并赋值(繁)∶
数据类型[][]数组名= new数据类型[高维长度][;//不规则数组,自行new低维数组 - 声明并赋值(简):
数据类型[]数组名={ {fv1,v2,v3},{v4,v5},{v6,v7,v8,v9}};//显示初始化
赋值:
内存分配:
数组的访问:
面向对象
什么是对象:
- 面向对象思想(Object Oriented Programming) :
- 一切客观存在的事物都是对象,万物皆对象。
- 任何对象,一定具有自己的特征和行为。
类的定义
对象的创建
类与对象之间的关系
- 类:定义了对象应具有的特征和行为,类是对象的模板。
- 对象:拥有多个特征和行为的实体,对象是类的实例。
实例变量与局部变量区别:
方法的重载
什么是方法的重载:
- 一个类中定义多个相同名称的方法。
- 方法名称相同。
- 参数列表不同(类型、个数、顺序)。。与访问修饰符、返回值类型无关。
- 调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法。
好处:灵活、方便、屏蔽使用差异。
构造方法
类中的特殊方法,主要用于创建对象。
- 特点:
- 名称与类名完全相同。。没有返回值类型。
- 创建对象时,触发构造方法的调用,不可通过句点手动调用。
注意:如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法。
对象创建的过程:
- 内存中开辟对象空间
- 为各个属性赋予初始值
- 执行构造方法中的代码
- 将对象地址赋给变量
对象的内存分配:
this关键字:
详细使用见:https://www.hm1006.cn/archives/thisproblem
记录学习中遇到的小问题。。加油!!!更好的明天在等着你
Q.E.D.