`

JAVA基础--方法传参

    博客分类:
  • java
 
阅读更多

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

    Java基础精品课12-抽象类录屏3.方法传参时完成向上转型.mp4

    自定义注解实现伪动态传参的小demo

    这个一个自定义注解实现给注解传递伪动态参数的小案例,可以在此自定义注解的基础上来记录接口的调用记录。

    java调用C++动态库,传参包括基础类型、指针类型、结构类型、结构指针类型的实际例子

    适用人群:想通过jna的方式...资源内容:java通过jna方式调用C++动态链接库,多种传参实际案例。具体包括基础数据类型、指针类型、结构类型、结构指针类型,里面带有例子dll,可直接运行。 注意事项:需要用32位的jdk

    java web技术开发大全(最全最新)

    有Java基础,想进一步学习SSH框架整合开发的人员 了解SSH整合开发,想进一步提高开发技术的人员 正在使用SSH整合技术开发项目,想查阅资料的人员 大中专院校的学生和老师,以及Java培训班的学员和讲师 需要一本案头...

    java web开发技术大全

    有Java基础,想进一步学习SSH框架整合开发的人员 了解SSH整合开发,想进一步提高开发技术的人员 正在使用SSH整合技术开发项目,想查阅资料的人员 大中专院校的学生和老师,以及Java培训班的学员和讲师 需要一本...

    JavaSE基础学习笔记

    Java的方法 1、何谓方法 2、方法的定义 方法调用 练习:比大小 面试题: 3、方法的重载 4、命令行传参 5、可变参数 6、递归 数组 数组概述 数组声明创建 Java内存分析 三种初始化 数组的四个基本特点 数组边界 数组...

    java_algorithm:Java算法集合:排序、高级排序、堆和堆排序、二分搜索树、并查表、图的基础、最小生成树、最短路径

    Java_Algorithm(Java算法集合) 学习算法是为了什么? 1、应对大型IT公司的算法面试题; 2、IDE即对编译算法的封装; 3、搜索引擎中对几千、几亿数据进行优劣排序; 4、游戏对算法的引用是非常丰富的; 5、算法对...

    python基础学习day05.txt

    方法名(方法传参列表) 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) # 查看...

    cube-project:工程示例

    cube基础工程脚手架包装分类UserController OrderController PayController该层有统一的RequestBody和ResponseBody的切面操作,主要用于请求报文解密和响应报文加密 UserService MemeberService GoodsService Stock...

    springboot-api

    如数据库字段类型smallint生成model的字段类型为Integer事物支持声明式与注解式基于hibernate-validator的参数自动校验,统一异常处理参数校验错误前台传参智能映射java.util.Date类型,[自动映射四种日期格式:yyyy...

    python基础2day04.txt

    位置传参(先) 序列传参 关键字传参(后) 字典关键字传参 例: def fn(a, b, c): pass fn(1, 2, 3) fn(a=1, c=3, b=2) fn(1, c=3, b=2) # 对的 fn(a=1, b=2, 3) 函数的形参的定义方式: 位置形参 星号...

    详解 WebView 与 JS 交互传值问题

    其实将我们在 Android 原生中将 Java 对象实例传值给 JS 承认并且可以使用的对象,方法非常简单。我们来举个例子。 html 文件 我们在本地写了一个 html 文件,放在 assets 目录中。 <!DOCTYPE html> <html&gt...

    springboot+websocket实现聊天室

    我是基于springboot+websocket,首先,简历websocket服务端,然后在页面进行调用,通过传参告诉服务端你要在哪个聊天室聊天,等等 ,具体的 看我的实现代码。这还是最基础的,中间可以加一些消息件

    SpringMVCStudy:在SpringMVC中学习的一些记录,先学习jsp语法

    仅仅作为HelloWorld的demo使用,暂无后续学习内容的更新,只是用来帮助说明定义URI向服务器传参的方法。基本HelloWorlddemo-jsp定义从服务器回参的方法:在2018-5-8的时候修改扩充,这个页面已经变成了js基础语法的...

    泛型类型转换Demo

    根据不同类型枚举,set等进行泛型转换,有赋值转换,也有传参转换,大多数都是底层方法描述,可运行

    Struts2入门教程(全新完整版)

    1.基础表单标签 40 2.单选按钮和复选框: 41 3.三种方式实现下拉列表 41 4.二级联动 42 5.其它表单标签 44 6.其它常用标签的使用(代码参名为“补充”的文件夹下的tag.jsp) 45 七、国际化 47 1.action级别下的国际...

    微信小程序带参数二维码让我重新认识Post网络请求

    自认为小程序开发基础篇已经“扫”完了,结果今天尝试做小程序带参数二维码功能时尴尬了,瞬间鄙视自己的技术水平。本文虽说探讨的是微信小程序带参数二维码的问题,但更多解决的是HTTP请 ...       (此图片来源...

    筛选菜单库DropDownMenu­_.zip

    简介本例是在DropDownMenu基础上改进而来相比而言增加de特性:增加三种默认样式类型:TYPE_LIST_CITY,TYPE_LIST_SIMPLE,TYPE_GRID增加默认样式点击回调(只需关心传入数组和选择结果,不相关内容无须关心)修改传参,...

Global site tag (gtag.js) - Google Analytics