Java参数(局部变量)传值、可变参数(int ...x)的使用

Java参数传值:

特点:

1、参数属于局部变量;

2、当对象调用方法时,参数被分配内存空间,同时要求对象为参数传值才能进行使用,即方法被调用时,参数变量必须有具体的值;

如下代码演示:在代码中,pv.tests() 是错误的,对象调用方法时,并没有为参数进行传值 ;

public class Pass_Value_Test {

	int tests(int x,int y){
		int sum = x+y ;
		return sum;
	}

	public static void main(String[] args) {
		
		//计算x+y的值
		Pass_Value_Test pv = new Pass_Value_Test();
		System.out.println(pv.tests(1, 10));  //正确
		System.out.println(pv.tests());    //错误

	}

pv.tests() 报错:The method tests(int, int) in the type Pass_Value_Test is not applicable for the arguments ()

一、基本数据类型参数的传值

基本数据类型参数的传值,该传值的类型级别不能高于该参数的级别,如不能用 float 类型的值进行传值给 int类型 的参数;

如下代码演示:  11.11f 和 111.111f 的级别高于 int x 和 int y , 所以报错;

public class Pass_Value_Test {

	int tests(int x,int y){
		int sum = x+y ;
		return sum;
	}

	public static void main(String[] args) {
		
		//计算x+y的值
		Pass_Value_Test pv = new Pass_Value_Test();
		System.out.println(pv.tests(1, 10));  //正确
		pv.tests(11.11f, 111.111f);  //错误

	}

pv.tests(11.11f, 111.111f);  

报错:The method tests(int, int) in the type Pass_Value_Test is not applicable for the arguments (float, float)

二、引用类型参数的传值

Java引用数据类型包括:数组、对象、接口等等;当参数是引用类型时,“ 传值 ” 传递的是变量中存放的引用,而不是变量所引用的实体;

以下代码通过  引用类型参数 为 对象 进行演示:

//创建电池类,battery
class battery {
	int electricityAmount ; //创建成员变量,代表电池的剩余电量
	battery(int amount){    //参数 int类型 amount
		electricityAmount = amount ;  
	}
}
//创建收音机类,radio
class radio {
	//声明方法,计算电池使用量
	void openRadio(battery bt){  //创建引用类型参数:bt对象,此时对象只是声明,不具有引用和实体
	bt.electricityAmount = bt.electricityAmount - 10 ;  //每次调用openRadio方法,电量就减10
	}
}
//创建主类
public class Pass_Value_Test {
	public static void main(String[] args) {
		
		//测试 引用类型参数的传值
		//创建三个类,一个电池类Battery ,一个收音机类 Radio,一个测试类 主类
		
		battery bas = new battery(100);  //设置初始电量为 100 ;
		System.out.println("电池电量为:"+bas.electricityAmount);
		System.out.println("开始使用收音机·····");
		radio ras = new radio();
	//为 引用类型参数 bt对象 进行赋值  bas对象 ,此时 bt具有bas的引用以及bas的实体了;
                ras.openRadio(bas);   
		System.out.println("关闭收音机,电池电量剩余:"+ bas.electricityAmount);
		
	}
}

在以上代码中, 引用类型参数  bt ,在调用 ras.openRadio(bas);  时,就具有了和 bas 一样的引用和实体,所以在进行,

bt.electricityAmount = bt.electricityAmount - 10 ; 语句的时候, bas 里面的原实体 electricityAmount 的值也会进行改变;

也就是:改变参数变量所引用的实体,那么也会导致原对象的实体发生同样的改变 ;

需要注意的是:

改变参数中存放的 “ 引用 ” 不会影响向其传值的变量中存放的 “ 引用 ” ;

以下代码演示:

//创建电池类,battery
class battery {
	int electricityAmount ; //创建成员变量,代表电池的剩余电量
	battery(int amount){    //参数 int类型 amount
		electricityAmount = amount ;  
	}
}
//创建收音机类,radio
class radio {
	//声明方法,计算电池使用量
	void openRadio(battery bt){  //创建引用类型参数:bt对象,此时对象只是声明,不具有引用和实体
		bt.electricityAmount = bt.electricityAmount - 10 ;  //每次调用openRadio方法,电量就减10
		//输出 此时 bt 的引用
		System.out.println("bt的引用="+bt);
	}
}
//创建主类
public class Pass_Value_Test {

	public static void main(String[] args) {
		
		//测试 引用类型参数的传值
		//创建三个类,一个电池类Battery ,一个收音机类 Radio,一个测试类 主类
		
		battery bas = new battery(100);  //设置初始电量为 100 ;
		System.out.println("bas的引用="+bas);
		System.out.println("电池电量为:"+bas.electricityAmount);
		System.out.println("开始使用收音机·····");
		radio ras = new radio();
		ras.openRadio(bas);   //为 引用类型参数 bt对象 进行赋值  bas对象 ,此时 bt具有bas的引用以及bas的实体了;
		System.out.println("关闭收音机,电池电量剩余:"+ bas.electricityAmount);
		
		battery bax = new battery(100);  //设置初始电量为 100 ;
		System.out.println("bax的引用="+bax);
		ras.openRadio(bax);
		ras.openRadio(bax);
		System.out.println("bax的electricityAmount:"+ bax.electricityAmount);
		System.out.println("bas的electricityAmount:"+ bas.electricityAmount);

	}
}

在以上代码中,在执行 ras.openRadio(bax); 时,改变了 bt 参数的引用,此时 bt 的引用和实体就 与 bas 是不一样的了;都是bas中的引用还是原来的值,不会因为 bt 的改变而发生改变;

代码执行结果:

bas的引用=Chapter_Four.battery@7852e922
电池电量为:100
开始使用收音机·····
bt的引用=Chapter_Four.battery@7852e922
关闭收音机,电池电量剩余:90
bax的引用=Chapter_Four.battery@4e25154f
bt的引用=Chapter_Four.battery@4e25154f
bt的引用=Chapter_Four.battery@4e25154f
bax的electricityAmount:80
bas的electricityAmount:90

可变参数:

1、可变参数指:在声明方法时不给出 参数列表中从某项开始直至最后一项参数的名字和个数,但这些参数的类型必须是相同的;

2、可变参数使用 " ... " 表示若干参数,并且最后一个参数必须是方法的参数列表中的最后一个参数

如下演示:

public void test( int ... x){}      //正确

public void testone(double s , int ... y){}         //正确

public void  errorone( int ... x , double y ){}    //错误,因为最后一个参数 y 不属于参数列表中 int ... x 的最后一个参数

public void  errortwo( int .... x ){}     //错误,因为可变参数使用 " ... " 表示若干参数

其中 int ... x 和 int ... y 中的 x,y 是参数列表中可变参数的 “ 参数代表 ” ;

3、参数代表可以通过下标运算来表示参数列表中的具体参数,即 x[0]、x[1]、x[2]、x[n-1]、x[n] 分别表示 x 代表的 第一个 到 第n 个参数;

如下代码演示:

public class Parameter_Test {
	int sum = 0;
	// 可变参数的测试
	void testx(int ... x) {
		for(int i=1;i<x.length;i++){
			sum += x[i]; 
		}
		System.out.println("sum的值="+sum);
	}
	
	public static void main(String[] args) {
		Parameter_Test pt = new Parameter_Test();
		pt.testx(1,11,111,1111);
                pt.testx(2,22,222,2222,22222);
	}
}

代码输出:

sum的值=1233 

sum的值=25921

以上代码中 :

pt.testx(1,11,111,1111);  相当于方法 testx 中参数列表个数为四个,分别为 x[0]、x[1]、x[2]、x[3]

pt.testx(2,22,222,2222,22222); 相当于方法 testx 中参数列表个数为五个,分别为 x[0]、x[1]、x[2]、x[3]、x[4]

4、Java还提供了增强的for循环,如下代码演示:

public class Parameter_Test {
	int sum = 0;
	// 可变参数的测试
	void testx(int ... x) {
		for(int i:x ){
			sum += i; 
		}
		System.out.println("sum的值="+sum);
	}
	
	public static void main(String[] args) {
		Parameter_Test pt = new Parameter_Test();
		pt.testx(1,11,111,1111);
		pt.testx(2,22,222,2222,22222);
	}
}

代码输出:

sum的值=1233 

sum的值=25921

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值