方法/函数

方法的定义:

实现特定功能的一段代码,可反复使用。

方法的调用:

调用方法时,会优先执行方法内部代码,结束后,返回到方法调用处,继续向下执行。

形参与实参:

//定义语法:
public static void 方法名称(形式参数){
	方法体
}
//调用
方法名称(实际参数);

返回值与返回值类型

  • 概念:方法执行后的返回结果。

  • 方法执行后,一些情况下无需返回结果;另一些情况下则必须返回结果。
    image.png

  • 定义语法:

public static返回值类型方法名称(形式参数列表){
	//方法主体
	//规定返回值的具体类型(基本、引用、void)
	//根据需求返回一个结果(值)。
	return value;//返回值
}
  • 调用语法:
    变量=方法名称();
    变量类型与返回值类型一致。

return关键字

  • return的两种用法:
    • 应用在具有返回值类型的方法中:
      • return value;//表示结束当前方法,并伴有返回值,返回到方法调用处。
    • 应用在没有返回值类型(void)的方法中:
      • return; //表示结束当前方法,直接返回到方法调用处。

递归

定义:

  • 解决具有既定规律的问题时,在方法内部再次调用自身方法的一种编程方式。

  • 何时使用递归?

    • 当需要解决的问题可以拆分成若干个小问题,大小问题的解决方式相同,方法中自己调用自己。
    • 使用循环解决的常规问题,都可以替换为递归解决。
  • 如何正确使用递归?

    • 设置有效的出口条件,可以让调用链上的每个方法都可以正确返回,避免无穷递归。

递归案例

阶乘:
image.png

数组

数组的概念:

  • 概念:一组连续的存储空间,存储多个相同数据类型的值。

数组的组成:

1.数据类型 2.数组名(变量名)3.数组是下标(元素)4.数组的长度

数组创建的四种方式:

  • 先声明、再分配空间:

数据类型[数组名;
数组名= new数据类型[长度];

  • 声明并分配空间:

数据类型[数组名= new数据类型[长度];
  • 声明并赋值(繁)∶

数据类型[数组名= new数据类型[{value1,value2,value3,.};

  • 声明并赋值(简)(常用)∶

数据类型数组名= {value1,value2,value3...};//显示初始化,注意:不可换行

数组的扩容:

image.png

复制方式:

  • 循环将原数组中所有元素逐━赋值给新数组。
  • 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++;
		}
	}

地址替换

image.png

可变长参数

  • 概念:可接收多个同类型实参,个数不限,使用方式与数组相同。
  • 语法:数据类型...形参名//必须定义在形参列表的最后,且只能有一个。
    image.png

二维数组

  • 概念:一维数组中的一维数组;数组中的元素,还是数组。

创建语法:

  • 先声明、再分配空间:
    数据类型[][数组名;
    数组名= new数据类型[高维长度][低维长度];
  • 声明并分配空间:
    数据类型数组名=new数据类型[高维长度][低维长度];
  • 声明并赋值(繁)∶
    数据类型[][]数组名= new数据类型[高维长度][;//不规则数组,自行new低维数组
  • 声明并赋值(简):
    数据类型[]数组名={ {fv1,v2,v3},{v4,v5},{v6,v7,v8,v9}};//显示初始化

赋值:

image.png

内存分配:

image.png

数组的访问:

image.png

面向对象

什么是对象:

  • 面向对象思想(Object Oriented Programming) :
    • 一切客观存在的事物都是对象,万物皆对象。
    • 任何对象,一定具有自己的特征和行为。

类的定义

image.png

对象的创建

image.png

类与对象之间的关系

  • 类:定义了对象应具有的特征和行为,类是对象的模板。
  • 对象:拥有多个特征和行为的实体,对象是类的实例。

实例变量与局部变量区别:

image.png

方法的重载

什么是方法的重载:

  • 一个类中定义多个相同名称的方法。
  • 方法名称相同。
  • 参数列表不同(类型、个数、顺序)。。与访问修饰符、返回值类型无关。
  • 调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法。

好处:灵活、方便、屏蔽使用差异。

构造方法

类中的特殊方法,主要用于创建对象。

  • 特点:
    • 名称与类名完全相同。。没有返回值类型。
    • 创建对象时,触发构造方法的调用,不可通过句点手动调用。

注意:如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法。

对象创建的过程:

  • 内存中开辟对象空间
  • 为各个属性赋予初始值
  • 执行构造方法中的代码
  • 将对象地址赋给变量

对象的内存分配:

image.png

this关键字:

image.png
详细使用见:https://www.hm1006.cn/archives/thisproblem

记录学习中遇到的小问题。。加油!!!更好的明天在等着你

Q.E.D.


如人饮水、冷暖自知