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
了解这些基础知识后,我们可以进一步研究源码和使用工具来深入理解方法调用和参数传递。例如,使用IDEA的调试功能,可以观察方法调用前后变量的变化,或者通过JIT编译器优化看到方法调用的实际运行效果。 总结来说...
这只是一个基础示例,实际场景中,你可以根据需求扩展注解的用途,比如添加更多的元素、实现更复杂的逻辑等。此外,还可以结合Spring框架的AOP特性,将注解驱动的逻辑进一步自动化,提高代码的可维护性和可扩展性。
Android中的`WebView`组件是实现JavaScript与Java交互的基础。`WebView`可以加载HTML、CSS和JavaScript代码,同时提供了API接口供Java代码与网页内容进行通信。 2. **JavaScriptInterface** 要让JavaScript能够...
### 使用LIMIT传参的方法 在MySQL数据库操作过程中,`LIMIT`子句是非常实用的一个功能,尤其是在需要限制查询结果集大小的情况下。本文将详细介绍如何在MySQL中使用`LIMIT`结合参数化查询来实现灵活且安全的数据...
在Java编程中,HTTP协议是网络通信的基础,用于客户端与服务器之间的数据交换。"HttpUtils Java get post 工具类" 提供了便捷的方法来发送GET和POST请求,简化了网络请求的操作。以下是对这两个主要HTTP方法的详细...
### Java操作数据库的基础 在Java中,操作数据库主要依赖于JDBC(Java Database Connectivity)技术,这是一种用于执行SQL语句的标准Java API,可以与各种关系型数据库进行交互。JDBC提供了DriverManager类来加载...
以下将详细解释Java方法的基础知识,包括方法的定义、结构、创建以及简单递归。 1. **方法的定义**: - 方法是Java中的一组有序的语句,这些语句组合在一起完成一个特定的任务。方法可以存在于类或对象中,通过...
了解这些基础概念后,开发者可以进一步学习如何处理复杂场景,如表单验证、文件上传、多表单数据等。在实际项目中,通常会结合Model-View-Controller(MVC)架构,使用框架如Spring MVC或Struts来更高效地管理页面...
在Java编程语言中,基本类型形参传参是日常编程中的常见操作。这些基本类型包括int、char、boolean、byte、short、long、float和double。本练习27重点探讨了如何在方法中使用基本类型作为参数,以及它们在传参过程中...
在Java编程语言中,数组是一种特殊的数据结构,用于存储同类型的多个数据项。...了解这些基础知识对于编写高效、可维护的Java程序至关重要。希望本文提供的信息对你的学习有所帮助,如有任何疑问,欢迎进一步探讨。
**答案:** 就是将基础类型的数据用类封装,使用其中的方法,及类的传参方式。 **解析:** Java提供了基本数据类型的包装类,这些包装类允许开发者以对象的方式处理基本类型数据。每个基本类型都有对应的包装类: - `...
Java基础复习day03数组 Java数组是一种数据类型,引用类型,用于存放一组数据的数据结构。数组的定义、创建、访问、长度属性、遍历、常用Arrays类、二维数组、方法递归调用经典案例、变量源码教程等。 一、数组的...
熟悉方法的调用和传参方式,有助于提升代码的可读性和效率。 7. **面向对象编程**:Java的核心特性之一是面向对象,包括类的定义、对象的创建、封装、继承和多态。例如,`public class Demo5`可能展示了类的定义和...
适用人群:想通过jna的方式...资源内容:java通过jna方式调用C++动态链接库,多种传参实际案例。具体包括基础数据类型、指针类型、结构类型、结构指针类型,里面带有例子dll,可直接运行。 注意事项:需要用32位的jdk
##### 6.3 成员方法传参机制 - **基本数据类型**:传递的是值的副本。 - **引用数据类型**:传递的是引用,即对象地址。 ##### 6.4 递归 - **定义**:方法调用自身的过程。 - **实现要点**: - **递归基**:最简单...
《MFC程序与Java程序之间的数据交换》这篇文章深入探讨了MFC(Microsoft Foundation Classes)程序与Java程序之间实现数据交换的技术细节与应用场景,尤其聚焦于如何利用ODBC(Open Database Connectivity)技术在...
Java是一种广泛使用的面向对象的编程语言,其基础语法是学习Java编程的重要部分。这份PPT教程主要涵盖了Java的基础数据类型、字符以及字符串的使用。 首先,Java的数据类型分为两大类:基本数据类型和引用数据类型...
#### 一、Java基础:类与对象的初始化顺序 在Java中,类与对象的初始化顺序对于理解程序执行流程非常重要。下面通过提供的代码示例进行详细解析。 ```java public class Father { private static int i = test();...