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

说完了类和对象,我们再对类的成员中的方法做一个详细的讲解

方法的定义本身比较简单,我在这里就不说了,关于上面提到的类和对象,大家可以参考我上一篇文章:面向对象有那么难吗?一个月搞定面向对象——第一周(1)

一、方法的重载:

什么是重载

我们在编程时,可能有些时候需要用同一个方法名,但是在不同的地方用的时候传递的参数类型以及数量可能不同,里面的内容可能不同,但是方法名是相同的。
那么我们就引入的重载的定义:在同一个类中,允许存在一个以上的同名方法,只要他们的参数类型或数量不同即可。

重载的特点

方法的重载与返回值类型无关,但参数列表必须不同(参数类型以及数量)。调用时,根据调用的方法参数列表的不同来区别。
我们来举个栗子~

public class OverloadExer {
	
	//1. 如下的三个方法构成重载
	public void mOL(int i){
		System.out.println(i * i);
		
	}
	public void mOL(int i,int j){
		System.out.println(i * j);
	}
	
	public void mOL(String s){
		System.out.println(s);
	}
	
	//2.如下的三个方法构成重载
	public int max(int i,int j){
		return (i > j)? i : j;
	}
	public double max(double d1,double d2){
		return (d1 > d2)? d1 : d2;
	}
	public double max(double d1,double d2,double d3){
		double max = (d1 > d2)? d1 : d2;
		return (max > d3)? max : d3;
	}

**

二、可变个数形参

**

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);

可变个数形参的声明方法:方法名(参数的类型名…参数名)
可变个数形参能识别的参数可以是0个,1个或多个,也就是说,没有参数也可以调用这个方法。

说了这个概念,那究竟要怎么用呢?
我们在代码中分析:

public class MethodArgsTest {
	
	public static void main(String[] args) {
		
		MethodArgsTest test = new MethodArgsTest();
		test.show(12);
//		test.show("hello");
//		test.show("hello","world");
//		test.show();
		
		test.show(new String[]{"AA","BB","CC"});
		
	}
	
	
	public void show(int i){
		
	}
	
	public void show(String s){
		System.out.println("show(String)");
	}
	
	public void show(String ... strs){
		System.out.println("show(String ... strs)");
		
		for(int i = 0;i < strs.length;i++){
			System.out.println(strs[i]);
		}
	}
	
	
}

三、方法参数的值传递机制

若形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
若形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

下面我们分别用两端代码来解释设两个机制:

//这里我们用交换两个数的程序来说明这一点
//首先是基本数据类型
public class ValueTransferTest1 {
	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;
		
		ValueTransferTest1 test = new ValueTransferTest1();
		test.swap(m, n);
		
		System.out.println("m = " + m + ", n = " + n);
		
		
	}
	
	
	public void swap(int m,int n){
		int temp = m ;
		m = n;
		n = temp;
	}
}

下面是引用数据类型

public class ValueTransferTest2 {
	
	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;
		
		ValueTransferTest2 test = new ValueTransferTest2();
		test.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;
	
}

大家可以好好体会一下这两段代码,这些应该可以帮助理解数据类型的值传递机制!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为梦而生~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值