【08】 Java方法的定义 方法调用 什么是值传递和引用传递
📔 千寻简笔记介绍
千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes
,包含笔记源文件.md
,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳,如果文章对你有帮助请帮我点一个Star
~
更新:支持在线阅读文章,根据发布日期分类。
文章目录
简介
本文关键词
方法的定义
、形参
、实参
、方法调用
、值传递
、引用传递
1 方法的定义
在Java中,方法的定义是指在类中声明和实现一个方法,以使其执行特定的功能。方法定义由以下几个部分组成:
- 访问修饰符:方法可以使用不同的访问修饰符来指定方法的可见性,如
public
、private
、protected
或者默认的无修饰符。 - 返回类型:方法可以有一个返回类型,用于指定方法返回的结果的数据类型。如果方法不返回任何值,则使用关键字
void
来表示。 - 方法名:方法名是唯一的标识符,用于调用该方法。方法名应符合命名规范,具有描述性,并遵循驼峰命名法。
- 参数列表:方法可以接受零个或多个参数作为输入。参数列表包括参数的数据类型和参数名,多个参数之间用逗号分隔。
- 方法体:方法体是由一组语句构成的代码块,用于实现方法的功能。方法体内的语句将按照定义的顺序执行。
下面是一个简单方法定义的示例:
public int calculateSum(int a, int b) {
int sum = a + b;
return sum;
}
在上述示例中,方法的定义包括:
- 访问修饰符:
public
- 返回类型:
int
(返回一个整数) - 方法名:
calculateSum
- 参数列表:
(int a, int b)
- 方法体:计算变量
a
和b
的和,并将结果返回。
通过这样的方法定义,我们可以在其他地方调用这个方法,并使用传递的参数进行计算。例如:int result = calculateSum(3, 5);
将返回 8
。
1.1参数类型
Java中,参数可以分为两种类型:形式参数和实际参数。
形式参数(形参)
形式参数是在方法定义时声明的参数,用于接收外界传入的数据。它们充当方法内部的占位符,用来定义方法的行为。形参的数据类型和名字在方法定义时被指定。
下面是一个示例方法定义,其中 a
和 b
是形式参数:
public int calculateSum(int a, int b) {
// 方法体
}
实际参数(实参)
实际参数是在方法调用时传递给方法的具体数值或变量。它们是真正用于执行方法的数据。
下面是使用上述方法定义进行方法调用的示例,其中 3
和 5
是实际参数:
int result = calculateSum(3, 5);
在此示例中,3
和 5
被传递给 calculateSum
方法作为实际参数。在方法执行过程中,参数 a
的值将为 3
,参数 b
的值将为 5
。
总结一下,形式参数是方法定义中声明的参数,用于定义方法的行为;而实际参数是在方法调用时传递给方法的具体数值或变量,作为形式参数的实际值。
2 方法调用
在Java中,要调用一个方法,需要按照以下格式:
调用方法:对象名.方法名(实参列表)
方法名(参数列表);
其中,方法名
是指要调用的方法的名称,参数列表
是指传递给方法的实际参数。
下面是一个示例,演示如何调用一个带有参数的方法:
public class MethodExample {
public static void main(String[] args) {
int a = 3;
int b = 5;
int result = calculateSum(a, b);
System.out.println("Sum: " + result); // 输出结果将是:Sum: 8
}
public static int calculateSum(int num1, int num2) {
int sum = num1 + num2;
return sum;
}
}
在上述示例中,我们定义了一个名为 calculateSum
的方法,用于计算两个整数的和。然后,在 main
方法中,我们定义了两个变量 a
和 b
,并将它们作为实际参数传递给 calculateSum
方法。调用完成后,返回的结果被存储在 result
变量中,并通过 System.out.println
输出到控制台。
通过这样的方法调用,我们可以使用方法来执行特定的功能,并获取返回的结果或效果。在调用方法时,确保传递给方法的实际参数与方法定义的形式参数的数量和类型匹配。
练习:比大小
public static void main(String[] args){
int max = max(10,20);
System.out.println(max);
}
public static int max(int num1,int num2){
if(num1 > num2){
return num1;
}else if(num1 < num2){
return num2;
}else{
System.out.println("相等");
}
return 0;
}
3 扩展:什么是值传递和引用传递
值传递(Pass-by-Value)和引用传递(Pass-by-Reference)是在方法调用时传递参数的两种不同方式。
- 值传递(Pass-by-Value): 值传递是指将实际参数的值复制给形式参数,方法中对形式参数的修改不会影响到实际参数。在值传递中,对形式参数的改变不会影响到实际参数本身。
- 引用传递(Pass-by-Reference): 引用传递是指将实际参数的引用(内存地址)传递给形式参数,方法中对形式参数的修改会影响到实际参数。在引用传递中,对形式参数的改变会影响到实际参数本身。
在Java中,所有的基本类型(如 int、float、boolean 等)都是通过值传递进行参数传递的。这意味着当你将一个基本类型的变量作为参数传递给方法时,实际参数的值会被复制到形式参数中,在方法中对形式参数的修改不会影响到原始的实际参数。
而对于对象类型(如数组、类实例等),Java采用的是引用传递的方式。当你将一个对象作为参数传递给方法时,实际参数的引用(内存地址)会被传递给形式参数,方法中对形式参数的修改会影响到原始的实际参数。
下面是一个示例,演示值传递和引用传递的区别:
public class PassByValueExample {
public static void main(String[] args) {
int num = 10;
System.out.println("Before method call: " + num);
changeValue(num);
System.out.println("After method call: " + num);
int[] arr = {1, 2, 3};
System.out.println("Before method call: " + Arrays.toString(arr));
changeArrayValue(arr);
System.out.println("After method call: " + Arrays.toString(arr));
}
public static void changeValue(int num) {
num = 20;
}
public static void changeArrayValue(int[] arr) {
arr[0] = 100;
}
}
输出结果将是:
Copy CodeBefore method call: 10
After method call: 10
Before method call: [1, 2, 3]
After method call: [100, 2, 3]
在这个示例中,我们定义了两个方法,changeValue
和 changeArrayValue
。changeValue
方法接收一个整数参数,并将参数值修改为 20,但并不影响到 num
原始变量的值。而 changeArrayValue
方法接收一个整数数组参数,并将数组的第一个元素修改为 100,这次改变会影响到 arr
原始数组的值。
这就是值传递和引用传递的区别。对于基本类型,传递的是值的副本,对形式参数的修改不会影响到实际参数。而对于对象类型,传递的是引用,对形式参数的修改会影响到实际参数。