关于方法的一些理解

方法的重载
重载的概念
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数
类型不同即可。
重载的特点:
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类
型)。调用时,根据方法参数列表的不同来区别。
重载示例:
//返回两个整数的和
int add(int x,int y){return x+y;}
//返回三个整数的和
int add(int x,int y,int z){return x+y+z;}
//返回两个小数的和
double add(double x,double y){return x+y;}
可变形参的方法
JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定
义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可
变的实参。
JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量
public static void test(int a ,String[] books);
JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public static void test(int a ,String…books);
说明:

  1. 声明格式:方法名(参数的类型名 …参数名)
  2. 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
  3. 可变个数形参的方法与同名的方法之间,彼此构成重载
  4. 可变参数方法的使用与方法参数部分使用数组是一致的
  5. 方法的参数部分有可变形参,需要放在形参声明的最后
  6. 在一个方法的形参位置,最多只能声明一个可变个数形参
    举例:
    在这里插入图片描述

方法参数的值传递机制
方法,必须由其所在类或对象调用才有意义。若方法含有参数:
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值
Java的实参值如何传入方法?
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本
(复制品)传入方法内,而参数本身不受影响。
形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
在这里插入图片描述

例如:交换m和n的值
	参数是基本数据类型时

在这里插入图片描述

在这里插入图片描述

在栈中:“先进后出”,当代码全部执行后swap()先出栈,后面只剩main(),所以结果为 m=10,n=20

	参数是引用数据类型时

在这里插入图片描述
在这里插入图片描述

递归方法
1.递归方法:一个方法体内调用它自身。
2. 方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
下列有三个例题:
public class RecursionTest {

public static void main(String[] args) {

// 例1:计算1-100之间所有自然数的和
	// 方式一:
	int sum = 0;
	for (int i = 1; i <= 100; i++) {
		sum += i;
	}
	System.out.println(sum);
	// 方式二:递归方法

	RecursionTest test = new RecursionTest();
	int sum1 = test.getSum(100);
	System.out.println(sum1);

//例2
System.out.println("*****************");
int sum2 = test.getSum1(10);
System.out.println(sum2);

//例3
	System.out.println("*****************");
	int value = test.f(10);
	System.out.println(value);

}
// 例1:计算1-100之间所有自然数的和
public int getSum(int n) {

	if (n == 1) {
		return 1;
	} else {
		return n + getSum(n - 1);
	}

}
// 例2:计算1-10之间所有自然数的乘积:n!
public int getSum1(int n) {

	if (n == 1) {
		return 1;
	} else {
		return n * getSum1(n - 1);
	}

}

//例3:已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),
//其中n是大于0的整数,求f(10)的值。
public int f(int n){
	if(n == 0){
		return 1;
	}else if(n == 1){
		return 4;
	}else{
	//  return f(n + 2) - 2 * f(n + 1);
		return 2*f(n - 1) + f(n - 2);
	}
}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值