Java参数(局部变量)传值、可变参数(int ...x)的使用 您所在的位置:网站首页 ssis教程参数传递方法 Java参数(局部变量)传值、可变参数(int ...x)的使用

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

2023-08-08 04:48| 来源: 网络整理| 查看: 265

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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有