ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-02-01 15:39:48  阅读:237  来源: 互联网

标签:... Java bas electricityAmount int bt 参数 引用


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

 

 

 

 

选丶择。 发布了34 篇原创文章 · 获赞 7 · 访问量 3690 私信 关注

标签:...,Java,bas,electricityAmount,int,bt,参数,引用
来源: https://blog.csdn.net/LagerSwan/article/details/104132852

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有