JAVA基础--方法传参
为啥拿这个当话题?
在初学者阶段,许多童鞋都对方法传参比较迷茫,知其然不知其所以然。
一.先说说参数传递的几个术语:
值调用(call by vale):表示方法接收的是调用者传递的值。
引用调用(call by reference):表示方法接收的是调用者传递的变量地址。
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值;
**JAVA语言总是采用值调用。
也就是说,JAVA方法得到的是所有参数值的一个拷贝,方法不能修改传递给他的任何参数变量的内容。
例如:
int age=100;
person.setAge(age);
在以上方法调用后,age 的值还是100;
下面再看一例子,假如某方法将一个变更值修改为原来的值的3倍:
public void addValue(int x){
x = 3 * x;
}
然后调用这个方法:
int percent = 10;
addValue(percnet);
无论如何调用,percent的值还是10,下面是执行过程:
1.x被初始化为percent值的一个拷贝(也就是10);
2.x被乘以3后,值变为30。但是percent仍然是10;
3.该方法结束后,参数变量x不再使用。
如图一:
二.java方法传参类型:
基本数据类型:(数字,布尔型)
对象引用类型:
基本数据类型传参在上例中已经说过了,是不能修改基本数据类型参数的值的.
那么对于对象引用类型的传参,能否修改呢?
先来看例子:
有如下方法:
public static void tripleSalary(Employee x)
{
x.raiseSalary(200);
}
当调用如下代码
harry = new Employee();
tripleSalary(harry);
时,具体的执行过程如下:
1).x被初始化为harry对象的拷贝,这里是一个对象的引用;
2).raiseSalary方法应用于这个对象引用.即x和harry同时引用的Employee对象薪金提高了200%.
3).方法调用结束后,参数变量x不再使用.但对象变量harry继续引用那个薪金增至3倍Employee对象.
其过程如下图:
通过以上实例,可以看出对象参数传递的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象.
很多程序语言提供两种传递方式:值传递和引用传递(C++和Pascal).
有些程序员认为java语言对对象参数传递也是用的引用调用.实际上是理解错误.这种错误具有一定的普遍性.下面通过一反例来说明该问题:
首先,编写一个交换两个Employee对象的方法:
public staitc void swap(Employee x,Emplyee y)
{
Employee temp = x;
x = y;
y = temp;
}
如果JAVA程序语言是对对象采用引用调用,那么这个方法就应该能够实现交换数据的效果:
Employee a = new Employee("Alice",...);
Employee b = new Employee("Bob",...);
swap(a,b);
但是,方法并没有改变存储在变量a和b中的对象引用。swap方法的参数x和y被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。
在方法结束时,参数变量x和y被丢弃了。原来的变量a和b仍然引用这个方法调用之前所引用的对象如下图:
这个过程说明:java语言对对象采用的不是引用调用,实际上对象引用进行的是值传递。
最后总结一下在JAVA中,方法参数的使用情况:
*一个方法不能修改一个基本数据类型的参数;
*一个方法可以改变一个对象参数的状态(属性);
*一个方法不能实现让对象参数引用一个新对象;
分享到:
相关推荐
Java基础精品课12-抽象类录屏3.方法传参时完成向上转型.mp4
今天小编就为大家分享一篇layui数据表格重载实现往后台传参,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
NULL 博文链接:https://m635674608.iteye.com/blog/1513061
主要介绍了android webview中使用Java调用JavaScript方法并获取返回值,本文直接给出代码示例,需要的朋友可以参考下
asp.net前台调用后台方法传参数! 值得下载看看!资源免费,大家分享!!
该列设为超链接,点击时向调用的js方法传参。 return "(parameter)/>这里onclick的参数是怎么传的呢
用java实现带参数发送post请求,以body方式传参的get请求,以pathValue方式传参的get请求
以上这篇php获取’/’传参的值简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:PHP传参之传值与传址的区别PHP页面间参数传递的四种方法详解
以下是我的模板,主要用在列表页table中的按钮,点击弹窗展开详情页的功能。 [removed] [removed];' bfnclick='showContent({{d.CONTENT}})'>查看内容 [removed] ... 于是改成下面的形式解决问题。...script type=
java实现调用httpclient接口的类和方法,包括了get和post传参方式,简单易懂
原文出处: http://lauwd.blog.163.com/blog/static/7605696920107429017/ 讲述了,c++和tcl联合使用的基本方法。
Android4.0入门之参数传递4种方式: 1.通过Intent方式传参 2.通过系统剪切板传参、需要对象转化成Base64的字符串进行传递 3.通过Application全局对象传值 4.通过Activity中的静态变量传参
在mysql中使用limit传参的方法,一个简单的实例
asp.net页面传参的三种方法,有需要的可以参考一下。。谢谢
json对接教程: ...如果第二种对接方法一直显示参数加载等待中代表无法使用这种方法传参,在接口种加入if=1参数切换到url传参3.选集列表api上传步骤视频种未操作,这个上传到苹果cms根目录解压即可
方法名(方法传参列表) S.isdigit() S.isalpha() S.count(sub[, start[, end]]) S.find(sub, start, end) S.replace(old, new[, count]) S.startswith(prefix) S.endswith(suffix) >>> help(str) # 查看...
1>OBJECT对象引用时 属性名和ActiveXObject方式有点区别;<2>CLASSID "CLSID:E798C16A D071 4854 8771 67333EDC49D5"引用方式才正确) function testActiveX { var SourceObj new ...
asp.net页面传参方法大全。很全面的
JNI是java调用C++程序的一种实现方法,网上有一些相关的资料,但不一定能适用,这个文档我在学习JNI时综合网上资料总结的,本人亲测能够实现,希望下载的网友有什么问题多多反馈,希望对学习JNI的朋友有所帮助
codeFactory 介绍: 1.codeFactory: Java代码生成,依赖rapid-generator.4.0.6...方法传参(table表名),支持批量传参和单表操作 3.main方法运行CodeGenerator类,在配置的outRoot输出路径找到生成代码,复制到对应项目包下.