面向对象编程-基础(三)

一、方法递归调用(非常非常重要,比较难)

1.1 基本介绍

简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁.

1.2 递归能解决什么问题?

在这里插入图片描述

1.3 递归举例

  1. 打印问题
  2. 阶乘问题

1.3.1 打印问题

public class Recursion01 {
	
	public static void main(String[] args) {
	//打印问题
	T t1 = new T();
	t1.test(4);//输出什么? n=2 n=3 n=4
	} 
}

class T { 
	//分析
	public void test(int n) { 
		if (n > 2) {
			test(n - 1); 
		}
		System.out.println("n=" + n); 
	}
}

在这里插入图片描述

1.3.2 阶乘问题

public class Recursion01 {
	
	public static void main(String[] args) {	
	//阶乘问题
	int res = t1.factorial(5); 
	System.out.println("5 的阶乘 res =" + res);
	} 
}

class T { 	
	//factorial 阶乘
	public int factorial(int n) {
		if (n == 1) { 
			return 1;//找出口
		} else {
			return factorial(n - 1) * n;
		} 
	}
}

在这里插入图片描述

1.4 递归重要规则

在这里插入图片描述

在使用递归之前,先找出口,然后再想步骤。

1.5 案例演示

在这里插入图片描述
斐波那契数列递归

public class RecursionExercise01 {

	public static void main(String[] args) {
		 T t1 = new T();
		 int n = 7;
		 int res = t1.fibonacci(n);
		 if(res != -1) {
		 	System.out.println("当 n="+ n +" 对应的斐波那契数=" + res);
		 }
	}
}


class T { 
	/*
		请使用递归的方式求出斐波那契数 1,1,2,3,5,8,13...
		给你一个整数 n,求出它的值是多 
		
		思路分析
		1. 当n=1 斐波那契数是1
		2. 当n=2 斐波那契数是1
		3. 当 n >= 3 斐波那契数 是前两个数的和 
		4. 这里就是一个递归的思路
	*/
	public int fibonacci(int n) { 
		if( n >= 1) {
			if( n == 1 || n == 2) { 
				return 1;
			} else {
				return fibonacci(n-1) + fibonacci(n-2);
			}
		} else {
			System.out.println("要求输入的 n>=1 的整数");
			return -1; 
		}
	}
}

二、方法重载(OverLoad)

2.1 基本介绍

Java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一致!

2.2 重载的好处

  1. 减轻了起名的麻烦
  2. 减轻了记名的麻烦

2.3 快速入门案例

案例:类:MyCalculator 方法:calculate

  1. calculate(int n1, int n2) //两个整数的和
  2. calculate(int n1, double n2) //一个整数,一个 double 的和
  3. calculate(double n2, int n1)//一个 double ,一个 Int 和
  4. calculate(int n1, int n2, int n3)//三个 int 的和

2.4 注意事项和使用细节

在这里插入图片描述

三、可变参数

3.1 基本概念

可变参数
适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
注意
可变参数必须位于最后一项。

3.2 基本语法

访问修饰符 返回类型 方法名(数据类型... 形参名) {
	
}

3.3快速入门案例

//1. int... 表示接受的是可变参数,类型是 int ,即可以接收多个 int(0-多) //2. 使用可变参数时,可以当做数组来使用 即 nums 可以当做数组 
//3. 遍历 nums 求和即可
public int sum(int... nums) {
	System.out.println("接收的参数个数=" + nums.length); 
	int res = 0;
	for(int i = 0; i < nums.length; i++) {
		res += nums[i]; 
	}
	return res; 
}

3.4 注意事项和使用细节

在这里插入图片描述

四、作用域

4.1 基本使用

在这里插入图片描述

class Cat {
	//全局变量:也就是属性,作用域为整个类体 Cat 类:cry eat 等方法使用属性 
	//属性在定义时,可以直接赋值
	int age = 10; //指定的值是 10
	//全局变量(属性)可以不赋值,直接使用,因为有默认值, 
	double weight; //默认值是 0.0

	public void hi() { 
		//局部变量必须赋值后,才能使用,因为没有默认值 
		int num = 1;
		String address = "北京的猫"; 
		System.out.println("num=" + num); 
		System.out.println("address=" + address); 
		System.out.println("weight=" + weight);//属性
	}
	
	public void cry() {
		//1. 局部变量一般是指在成员方法中定义的变量 
		//2. n 和 name 就是局部变量
		//3. n 和 name 的作用域在 cry 方法中
		int n = 10;
		String name = "jack";
		System.out.println("在 cry 中使用属性 age=" + age);
	}
}

4.2 注意事项和细节使用

在这里插入图片描述
在这里插入图片描述
本博客引用韩顺平老师Java课程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值