目录
一.方法的概念及使用
1.1什么是方法
1.2方法的定义
1.3方法的调用
1.4实参和形参的关系
1.5没有返回值的方法
1.6方法的意义
二.方法重载
2.1方法重载的实现
2.2方法重载的意义
2.3方法签名
一.方法的概念及使用
1.1什么是方法
方法就是一个代码片段. 类似于 C 语言中的 "函数",来实现特定的功能,我们输入相关代码进去到方法中,让方法帮我们完成功能。其中涉及到方法的定义,调用,执行。
举几个简单的例子:
-
烹饪食物:将烹饪食物比作一个方法。你有一个菜谱(方法定义),其中包含了烹饪特定菜肴的步骤。当你想要做同样的菜肴时,你可以根据菜谱的指导(调用方法)来准备食材、进行烹饪,并最终获得可口的菜肴。
-
打电话:将打电话比作一个方法。当你想要与某人进行通话时,你需要输入对方的电话号码(方法参数),然后按下拨号键(调用方法)。电话网路会连接你和对方,你可以进行交流并传递信息。
-
洗衣服:将洗衣服比作一个方法。当你需要清洗衣物时,你将衣物放入洗衣机中(方法参数),选择适当的程序和洗涤剂(方法调用),然后启动洗衣机(执行方法)。最终,你将得到干净的衣物。
在这些例子中,方法提供了一种可重复使用的方式来执行特定的任务。它们接受输入(参数),执行一系列操作,并产生输出(结果)。这样的抽象使得我们可以更有效地组织和重用我们的行动,就像在编程中使用方法一样。
1.2方法的定义
方法的定义由以下几个组成部分:
-
访问修饰符(Access Modifier):用于控制其他类是否可以访问该方法。常见的访问修饰符包括public、private、protected和默认(不使用任何修饰符)。
-
返回类型(Return Type):指定方法执行完后返回的数据类型。如果方法不返回任何值,可以使用关键字void。
-
方法名称(Method Name):用于唯一标识方法的名称。方法名应该具有描述性,能够清晰地表达方法的功能。
-
参数列表(Parameter List):指定方法接受的输入参数。参数是方法执行所需的数据,可以有多个参数,并且每个参数都有其数据类型和名称。
-
方法体(Method Body):包含实际的代码块,定义了方法要执行的操作。方法体由一对花括号{}包围,其中包含了一系列的语句和逻辑。
-
返回语句(Return Statement):如果方法有返回类型,它可以使用return语句将结果返回给调用者。return语句也可以提前终止方法的执行。
在代码块实现是这样:
// 方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}
比如一个简单的代码:
public int Sum(int num1, int num2) {
int sum = num1 + num2;
return sum;
}
在上述例子中,方法名为"Sum",返回类型为int(返回整数)。它有两个参数num1和num2,都是整数类型。方法体中的代码将num1和num2相加,将结果存储在sum变量中,并使用return语句返回sum的值。
注意事项:
1. 修饰符:现阶段直接使用public static 固定搭配2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有回值,必须写成 void3. 方法名字:采用小驼峰命名4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开5. 方法体:方法内部要执行的语句6. 在java当中,方法必须写在类当中7. 在java当中,方法不能嵌套定义8. 在java当中,没有方法声明一说
1.3方法的调用
调用一个方法,你需要按照以下格式编写代码:
返回值类型 变量名 = 方法名(参数列表);
具体步骤如下:
-
使用方法的返回值类型声明一个变量,该变量将用于存储方法的返回结果。如果方法没有返回值(即返回类型为void),则不需要声明变量。
-
在等号左侧的变量名处,给变量取一个合适的名称,以便在后续的代码中引用该变量。
-
在等号右侧,写上要调用的方法名,并在括号内传递方法所需的参数。根据方法的定义,确保传递正确的参数类型和数量。
-
调用方法后,方法将执行其定义的操作,并返回一个结果(如果有返回值)。
简单的代码示例如下:求两数之和
// 定义一个名为Sum的方法,计算两个整数的和
public static int calculateSum(int num1, int num2) {
int sum = num1 + num2;
return sum;
}
// 在主程序中调用Sum方法
public static void main(String[] args) {
int result = calculateSum(3, 5); // 调用calculateSum方法,并传入参数3和5
System.out.println("Sum: " + result); // 打印结果:Sum: 8
}
输出代码如下:
在上述示例中,我们定义了一个名为"calculateSum"的方法,用于计算两个整数的和。在主程序的main方法中,我们调用calculateSum方法,并传递参数3和5。方法执行后,返回结果8被赋值给result变量,并通过打印语句输出到控制台。
注意事项:
1.定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.2.一个方法可以被多次调用.
1.4实参和形参的关系
在方法的定义和调用中,有两种类型的参数:形式参数(形参)和实际参数(实参)。
- 形式参数(形参)是在方法定义中声明的参数,用于接收方法调用时传递的值。形参相当于方法内部的局部变量,只在方法内部有效。形参在方法定义时指定其数据类型和名称。
- 实际参数(实参)是在方法调用时传递给方法的具体值或变量。实参是根据方法定义中形参的顺序进行传递的,并且必须与形参的类型相匹配。实参可以是常量、变量或表达式的值。
- 当方法被调用时,实参的值会被传递给对应的形参。这样,在方法内部,形参就可以使用传递进来的实参值进行操作。
举一个生活的例子理解:
假设你有一家制造汽车的工厂,你有一个汽车生产线,用于生产汽车。在这个例子中:
- 形式参数(形参):汽车设计图纸和规格说明书。设计图纸和规格说明书中包含了汽车的尺寸、配件要求和装配顺序等信息,相当于方法定义中声明的参数。这些信息并不是实际的汽车,只是用来描述要生产的汽车。
- 实际参数(实参):你根据设计图纸和规格说明书实际生产的汽车。这些实际的汽车是你根据设计图纸和规格说明书进行加工和装配的,相当于方法调用时传递给方法的具体值或变量。你根据设计图纸和规格说明书,使用零件和装配工具将汽车逐步加工和组装,最终得到实际的汽车。
当你将设计图纸和规格说明书交给工人时,他们会根据这些信息开始生产汽车。他们会根据设计图纸上的尺寸和配件要求,按照规定的装配顺序,使用实际的零件和工具进行加工和装配。在这个过程中,设计图纸和规格说明书充当了形参,而实际生产的汽车充当了实参。工人根据实际的设计图纸和规格说明书来进行加工和装配,最终生产出实际的汽车。
如下图:
还是举回上面的例子
// 定义一个名为Sum的方法,计算两个整数的和
public static int calculateSum(int num1, int num2) {
int sum = num1 + num2;
return sum;
}
// 在主程序中调用Sum方法
public static void main(String[] args) {
int result = calculateSum(3, 5); // 调用calculateSum方法,并传入参数3和5
System.out.println("Sum: " + result); // 打印结果:Sum: 8
}
定义的calculatesSum方法中,num1 和num2是形参,主函数main中调用时存放的两个数字3,5就是实参。
实参的值永远都是拷贝到形参中,形参和实参本质是两个实体。
用一段代码解释 :交换两个整数
public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("main: a = " + a + " b = " + b);
}
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println("swap: x = " + x + " y = " + y);
}
}
// 运行结果
swap: x = 20 y = 10
main: a = 10 b = 20
1.5没有返回值的方法
没有返回值的方法是指在方法定义中,方法声明的返回类型为`void`,表示该方法不返回任何值。
public void printMessage(String message) {
System.out.println(message);
}
在上述示例中,`printMessage`是一个没有返回值的方法。它接受一个字符串形参“message”,并将该字符串打印到控制台上。
当调用没有返回值的方法时,方法内部执行相应的操作,但不会返回任何值给调用者。在上述例子中,当调用`printMessage`方法并传递一个字符串实参时,方法会打印该字符串,但不会返回任何结果。
没有返回值的方法通常用于执行某些操作或完成特定任务,而无需返回结果。例如,打印信息、更新数据、发送通知等。这样的方法对程序的执行起到了一种"副作用"的作用,即修改了程序状态或执行了特定的操作,但不产生可用于后续计算的返回值。
在调用没有返回值的方法时,通常仅关注方法执行的效果,而不需要接收方法的返回结果。
注意:
- 形参的名字可以随意取,对方法都没有任何影响
形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。 在 Java 中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体
1.6方法的意义
1. 模块化和代码复用:方法将一系列相关的操作封装在一起,形成一个独立的模块。这有助于提高代码的可读性、可维护性和可重用性。
2. 抽象和封装:方法允许开发人员将程序的逻辑和实现细节隐藏在方法内部,只暴露必要的接口和功能给外部调用者。
3. 提高代码的可维护性和可读性:通过使用方法,将代码分解成多个小的、独立的功能块,使得代码更易于理解和维护。
4. 提高代码的灵活性和可扩展性:方法可以接受参数并返回结果,使得代码能够根据不同的输入产生不同的输出。
5. 实现面向对象的特性:方法是面向对象编程的基本构建块之一。通过方法,可以实现封装、继承和多态等面向对象的特性。
总之,方法在面向对象编程中具有重要的意义。它们帮助我们将代码组织成模块化、可维护和可复用的单元,提高了代码的可读性、可扩展性和可维护性。方法也是实现面向对象的特性的基础,使得我们能够更好地利用面向对象编程的优势。
二.方法重载
2.1方法重载的实现
方法重载是指在同一个类中定义多个方法,它们具有相同的名称但拥有不同的参数列表。通过方法重载,可以根据不同的参数类型和数量来调用相应的方法,从而实现相似功能的多个方法。
举例代码如下:
public class Calculator {
public static int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
}
在以上代码中, Calculator
类定义了三个名为add
的方法,它们具有相同的名称但参数列表不同。第一个add
方法接收两个整数作为参数,并返回它们的和。第二个add
方法接收两个双精度浮点数作为参数,并返回它们的和。第三个add
方法接收三个整数作为参数,并返回它们的和。
通过方法重载,我们可以根据需要选择合适的方法来执行相加操作。例如:
Calculator calculator = new Calculator();
int result1 = calculator.add(2, 3); // 调用第一个add方法,返回5
double result2 = calculator.add(2.5, 3.5); // 调用第二个add方法,返回6.0
int result3 = calculator.add(2, 3, 4); // 调用第三个add方法,返回9
通过传递不同的参数类型和数量,我们可以正确地调用适合的方法,实现了根据不同参数进行加法操作的灵活性。
注意:
1. 方法名必须相同2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)3. 与返回值类型是否相同无关// 注意:两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的 public class TestMethod { public static void main(String[] args) { int a = 10; int b = 20; int ret = add(a, b); System.out.println("ret = " + ret); } public static int add(int x, int y) { return x + y; } public static double add(int x, int y) { return x + y; } } // 编译出错 Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int) public static double add(int x, int y) { ^ 1 个错误
2.2方法重载的意义
-
提高代码可读性和可维护性
-
优化代码结构和设计
-
方便调用和使用
-
提高代码的兼容性
总之:方法重载在面向对象编程中具有重要的意义,它提供了更灵活、可读性更高、可维护性更好的代码编写方式,使得代码的设计和调用更加方便和易于理解。
2.3方法签名
我们知道,在Java中,在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可以定义方法名相同的方法呢?
这就涉及到方法签名:经过编译器编译修改过之后方法最终的名字。
具体方式: 方法全路径名 + 参数列表 + 返回值类型,构成 方法完整的名字。
比如以下代码:
public class TestMethod {
public static int add(int x, int y){
return x + y;
}
public static double add(double x, double y){
return x + y;
}
public static void main(String[] args) {
add(1,2);
add(1.5, 2.5);
}
}
上述代码经过编译之后,然后使用JDK自带的javap反汇编工具查看,具体操作:
方法签名中的一些特殊符号说明:
好了,到这里就结束了,如果有什么错误的地方请在评论区指出,谢谢。
创作不易,如果可以的的话,请大家多三连支持一下下。虎杖悠仁同学会很赞同的。