方法的重载、可变形参的方法、方法的参数值传递机制、递归方法

 


一、方法的重载

  • 定义:在同一个类中,允许存在一个或以上的同名方法,只要它们的参数个数或者参数类型不同即可.

"两同一不同" : 同一个类、相同方法名

                      参数列表不同,参数个数不同,参数类型不同

  • 举例:

            Arrays类中重载的sort() / binarySearch()

  • 判断是否是重载:

跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!

  • 在通过对象调用方法时,如何确定某一个指定的方法:

方法名-------->参数列表

package day06;

public class Demo {

	public static void main(String[] args) {
		Demo demo = new Demo();
		demo.getSum(1, 2);
	}
	
	//如下的4个方法构成了重载
	public void getSum(int i, int j) {
		System.out.println("方法一");
	}

	public void getSum(double d1, double d2) {
		System.out.println("方法二");
	}

	public void getSum(String s, int i) {
		System.out.println("方法三");
	}

	public void getSum(int i, String s) {
		System.out.println("方法四");
	}

}

二、可变形参的方法

  • JDK 5.0新增的内容

  • 具体使用:
  1. 可变个数形参的格式: 数据类型 ... 变量名
  2. 当调用可变个数形参的方法时,传入的参数个数可以是"0个,1个,2个,....
  3. 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
  4. 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载-----二者之间不能共存
  5. 可变个数形参在方法的形参中,必须声明在末尾 
package day06;

/*可变个数形参的方法
 * 
 * 1.JDK 5.0新增的内容
 * 2.具体使用:
 * 	2.1   可变个数形参的格式: 数据类型 ... 变量名
 *  2.2 当调用可变个数形参的方法时,传入的参数个数可以是"0个,1个,2个,....
 *  2.3 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
 *  2.4 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载-----二者之间不能共存
 *  2.5 可变个数形参在方法的形参中,必须声明在末尾 
 *  
 * */

public class Demo {
	
	public static void main(String[] args) {
		
		Demo demo = new Demo();
		demo.show(12);
		demo.show("hello");
		demo.show("hello","hello1","hello2");
		demo.show();
	}
	
	public void show(int i) {
		System.out.println(i);
	}

	public void show(String s) {
			System.out.println(s);
	}

	public void show(String ... str) {
		System.out.println("可变个数形参");
	}
	
//	public void show(String[] str) {
//		System.out.println("可变个数形参");
//	}
	
}

二、变量的值传递机制

  • 如果变量是基本数据类型,此时赋值的是变量所保存是数据值
  • 如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值
package day06;

/*
 * 关于变量的赋值:
 * 
 * 如果变量是基本数据类型,此时赋值的是变量所保存是数据值
 * 如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值
 * 
 * */

public class Demo {

	public static void main(String[] args) {

		System.out.println("*********************基本数据类型*********************");
		int m = 10;
		int n = m;
		System.out.println("m =" + m + ",n=" + n);

		n = 20;

		System.out.println("m =" + m + ",n=" + n);

		System.out.println("*********************引用数据类型*********************");

		Order o1 = new Order();
		o1.orderId = 1001;

		Order o2 = o1;//赋值以后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体

		System.out.println("o1.orderId =" + o1.orderId + ",o2.orderId =" + o2.orderId);

		o2.orderId = 1002;

		System.out.println("o1.orderId =" + o1.orderId + ",o2.orderId =" + o2.orderId);
	}
}

class Order {
	int orderId;
}

三、方法的形参的传递机制:基本数据类型

  • 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值(不是地址值)
package day06;

/*
 * 方法的形参的传递机制:基本数据类型
 * 
 * 1.形参: 方法定义时,声明的小括号内的参数
 * 	   实参: 方法调用时,实际传递给形参的数据
 * 
 * 2.值传递机制:
 * 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值(不是地址值)
 * */


public class Demo {

	public static void main(String[] args) {

		// 交换两个变量的值的操作
		int m = 10;
		int n = 20;
		
		System.out.println("m=" + m + ",n=" + n);
		
		//交换
		//int temp = m;
		//m = n;
		//n= temp;
		
		Demo demo = new Demo();
		demo.swap(m, n);
		
		//并没有交换成功
		System.out.println("m=" + m + ",n=" + n);
	}
	//错误方法
	public void swap(int m,int n) {
		int temp = m;
		m = n;
		n= temp;
	}
}

 

四、方法的形参的传递机制:引用数据类型

  • 如果参数是引用数据类型,此时实参赋给形参的是是地址值
package day06;

public class Demo {

	public static void main(String[] args) {

		Data data = new Data();
		
		data.m = 10;
		data.n = 20;

		System.out.println("m=" + data.m + ",n=" + data.n);

		// 交换m和n的值
		// int temp = data.m;
		// data.m = data.n;
		// data.n= temp;

		Demo demo = new Demo();
		demo.swap(data);
		
		System.out.println("m=" + data.m + ",n=" + data.n);

	}
	//成功
	public void swap(Data data) {
		int temp = data.m;
		data.m = data.n;
		data.n = temp;
	}
}

class Data {
	int m;
	int n;
}

五、递归方法

  • 递归方法:一个方法体内调用它自身。
  • 方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
  • 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
package day06;

/*
 * 递归方法的使用(了解)
 * 1.递归方法:一个方法体内调用它自身
 * 2.方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无需循环控制.
 * 递归一定要向己方向递归,否则这种递归就变成了无穷递归,类似于死循环.
 * 
 * 
 * */

public class Demo {
	public static void main(String[] args) {

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

		// 方法二:
		Demo demo = new Demo();
		int sum2 = demo.getSum(100);

		
		System.out.println(sum);
		System.out.println(sum2);

	}
	
	// 例2:计算1-100之间所有自然数的乘积
	public int getSum(int n) {
		if (n == 1) {
			return 1;
		} else {
			return n * getSum(n - 1);
		}
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值