1.4 Java函数(方法)

本文是课上资料的总结非原创没有转载地址

目录

  • Java函数(方法)
    • 1.函数的概念
    • 2.函数的定义
      • 2.1 定义语法
      • 2.2 定义位置
    • 3.函数的组成
    • 4.函数的调用
      • 函数的参数(形参与实参)
      • 函数返回值与返回值类型
      • return 关键字
    • 5.总结
    • 6.多级调用
    • 7.递归
      • 无穷递归
    • 递归
    • 循环阶乘
    • 递归阶乘
  • 总结
  • 作业题
  • 面试题

Java函数(方法)

1.函数的概念

  • 概念:实现特定功能的一段代码吗,可反复使用。

2.函数的定义

2.1 定义语法

public static void 函数名称() { // (遵循标识符命名规范)
	// 函数主题,功能代码
}
  • 经验:将需要在多个位置重复使用的一组代码,定义在函数内。

2.2 定义位置

  • 函数定义在类的内部,在main函数并列。
    1.4 Java函数(方法)_第1张图片

3.函数的组成

public static void 函数名(形参) {
	// 函数主题,功能代码
}
  • public:修饰符(后面会介绍)
  • static:修饰符(后面会介绍)
  • void:返回值
  • 函数名:遵循标识符命名规范
  • 形参:形式参数
    • 多数情况下,函数与调用者之间需要数据的交互;调用者必须提供必要的数据,才能使函数完成相应的功能。
    • 调用函数时,所传入的数据被称为“参数”。

4.函数的调用

1.4 Java函数(方法)_第2张图片

  • 调用语法
函数名称(实际参数);
  • 经验:“实参”等价于“局部变量的赋值”。

函数的参数(形参与实参)

  • 定义语法
public static void 函数名(形参) {
	// 函数主题,功能代码
}
  • 经验:“形参”等价于“局部变量的声明”。
  • 调用语法
函数名称(实际参数);
  • 经验:“实参”等价于“局部变量的赋值”。
  • 单个参数:
    1.4 Java函数(方法)_第3张图片
  • 多个参数:

1.4 Java函数(方法)_第4张图片

  • 经验:根据具体的业务需求,来定义函数的参数。

函数返回值与返回值类型

  • 函数调用时,一些情况下无需返回结果;另一些情况下则必须返回结果。
  • 例如:
    • 存款操作无需返回结果。
    • 取款操作必须返回结果。
  • 定义语法
public static 返回值类型 函数名称(形式参数) {
	// 函数主体
	return value; // 返回值
}
  • 规定返回值的具体类型(基本、引用、void)
  • 根据需求返回一个结果(值)。
  • 调用语法
变量 = 函数名称();

1.4 Java函数(方法)_第5张图片

return 关键字

1.4 Java函数(方法)_第6张图片
1.4 Java函数(方法)_第7张图片

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

5.总结

  • 注意:一个类中可以定义多个函数,函数之间属于并列关系,不可嵌套。
  • 经验:一个函数只做一件事。
  • 好处:
    • 减少代码冗余。
    • 提高复用性。
    • 提高可读性。
    • 提高可维护性。
    • 方便风合作。

6.多级调用

public class TestNestInvoke {
	public static void main(String[] args) {
		m1();
	}
	public static void m1() {
		System.out.println("m1() - start");
		m2();
		System.out.println("m1() - end");
	}
	public static void m2() {
		System.out.println("m2() - start");
		System.out.println("m2() - end");
	}
}
  • 运行结果:
m1() - start
m2() - start
m2() - end
m1() - end
  • 优先执行函数内部代码,结束后,返回到调用处,继续向下执行。

7.递归

无穷递归

public class TestRecursionInvoke {
	public static void main(String[] args) {
		m1();
	}
	public static void m1() {
		System.out.println("m1() - start");
		m1();
		System.out.println("m1() - end");
	}
}
  • 运行结果:
m1() - start
m1() - start
m1() - start
m1() - start
m1() - start
...
Exception in thread "main" java.lang.StackOverflowError
  • Exception in thread "main" java.lang.StackOverflowError内存溢出错误

递归

  • 实际开发中,递归可以解决具有特定规律的特定问题。
  • 何时使用递归?
    • 当需要解决的问题可以拆分成若干个小问题,大小问题的解决方法相同。
    • 有固定规律,函数中自己调用自己。
  • 如何正确使用递归?
    • 设置有效的出口条件,避免无穷递归。

循环阶乘

  • 计算阶乘:5 ! = 5 * 4 * 3 * 2 * 1;
public class TestFactorial {
	public static void main(String[] args) {
		System.out.println(factorial(5));
	}
	public static int factorial(int n) {
		int sum = 1;
		for (int i = 2; i <= n; i++) {
			sum *= i;
		}
		return sum;
	}
}
  • 依次与每个值相乘即可。

递归阶乘

  • 阶乘的定义:n != n * (n-1) * (n-2) * (n-3) …
    1.4 Java函数(方法)_第8张图片
public class TestFactorial {
	public static void main(String[] args) {
		System.out.println(factorial(5));
	}
	public static int factorial(int n) {
		if (n == 1) { // 出口条件 n = 1时,无需计算阶乘们直接返回结果1;
			return 1;
		}
		return n * factorial(n - 1);
	}
}

注意:所有能以递归解决的问题,循环都可以解决。当解决复杂问题时,递归的实现方式更为简单。

总结

  • 函数的概念
    实现特定功能的一段代码,可反复使用。
  • 函数的定义
    public static void 函数名() {函数主体}
  • 函数的组成
    形参列表、实参列表、返回值类型、返回值、函数名、函数主体。
  • 函数的调用
    函数名(实参...);
  • 函数的好处
    减少冗余、提高复用性、可读性、可维护性、方便分工合作。
  • 递归
    将大问题拆分成若干个小问题,大小问题的解决方法相同,有固定规律、函数中自己调用自己。

作业题

  1. 计算从1到某个数以内所有奇数的和。
  2. 计算从1到某个数以内所有能被3或者17整除的数的和。
  3. 计算1到某个数以内能被7或者3整除但不能同时被这两者整除的数的个数。
  4. 计算1到某个数以内能被7整除但不是偶数的数的个数。
  5. 从键盘输入一个数n,判断是不是一个质数(质数是只能被1和它自身整除的数)。
  6. 求2〜某个数之内的素数。【素数 : 只能被1或本身整除的数】
  7. 判断某个年份是否是闰年。
    A:能被4整除,并且不能被100整除 (2020)
    B:或者能被400整除。
  8. 已知有一个数列:f(0) = 1,f(1) = 4,f(n+2) = 2 * f(n+1) + f(n),其中n是大于0的整数,求f(n)的值(提示:使用递归)
  9. 求2+22+222+2222。
int a=0,sum=0;
for(int n=1;n<=4;n++){
	a=(a*10)+2;
	sum+=a;
}
System.out.print("sum="+sum);
  1. 使用递归实现10 的阶乘。
  2. 求某个三位数以内的水仙花数:
    水仙花数:一个数各个位上的立方之和,等于本身
    例如: 153 = 1(3) + 5(3)+3(3) = 1+125+27 = 153

面试题

面试题

  1. 方法的传参过程是如何工作的
    在调用方法的使用,在方面参数中写入实参,jvm运行时,会把实参赋值给形参。
  2. return关键字的用法有哪些,举例说明
    return; //结束方法 ,可以省略
    return sum; //返回结果 sum ,结束方法

你可能感兴趣的:(Java基础,java,编程语言)