Java_方法(重载方法签名等详解)

在之前我们学习C语言时,当我们想要重复使用某段代码的功能时,我们会将这段代码定义为一个函数,而在java中我们把这段重复使用的代码叫做方法。

 

方法的定义

类体的内容分为变量的声明和方法的定义,方法的定义包括两部分:方法头和方法体。

// 方法定义
修饰符 返回值类型 方法名称 ([ 参数类型 形参 ...]){
方法体代码 ;
[ return 返回值 ];
}
举个例子:检验一个年份是否为闰年
public class Method{public static boolean LeapYear(int year){if((year%4==0&&year%100!=0)||year%400==0)){return true;}else{return false;}}
}
注意事项
1. 修饰符:现阶段直接使用 public static 固定搭配
2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成
void
3. 方法名字:采用小驼峰命名
4. 参数列表:如果方法没有参数, () 中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
5. 方法体:方法内部要执行的语句
6. java 当中,方法必须写在类当中
7. java 当中,方法不能嵌套定义
8. 在java当中,没有方法声明一说,java是在全局搜索的,这点与c语言不一样哦。

方法调用的执行过程

方法调用过程

      调用方法 --- > 传递参数 --- > 找到方法地址 --- > 执行被调方法的方法体 --- > 被调方法结束返回 --- > 回到主调方法继续往下 执行。

这里在给大家一个例子好好体会一下java方法的语法:

计算1到5的阶乘:

public class TestMethod {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += fac(i);
}
System.out.println("sum = " + sum);
}
public static int fac(int n) {
System.out.println("计算 n 的阶乘中n! = " + n);
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
}
// 执行结果
计算 n 的阶乘中 n! = 1
计算 n 的阶乘中 n! = 2
计算 n 的阶乘中 n! = 3
计算 n 的阶乘中 n! = 4
计算 n 的阶乘中 n! = 5
sum = 153

java方法中形参与实参的关系

这里需要着重给大家强调,在java中所有的方法里形参都是实参的一份临时拷贝,这里与C语言是一样的。

还是给大家列举一个交换数值的例子帮助理解:

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

我们发现a与b的值并没有因为经过swap而发生交换,交换的只不过是形参x,y而实参a,b并没有改变。

注意:对于基础类型来说, 形参相当于实参的拷贝. 传值调用

方法重载

功能多态性就是指可以向功能传递不同的消息,以便让对象根据相应的消息来产生相应的行为。对象的行为通过类中的方法来体现,那么行为的多态性就是方法的重载。

简单点来说的话就是:

一个词语如果有多重含义,那么就说该词语被重载了,具体代表什么含义需要结合具体的场景。
Java 中方法也是可以重载的。
Java 中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。
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);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = add(a2, b2);
System.out.println("ret2 = " + ret2);
}
public static int add(int x, int y) {
return x + y;
}
}

add函数只能是完成两个整形的相加,而如果你若需要其他数据类型数据完成相加这个功能时还得,重新写一个方法,这就显得很多余,所以,java给我们提供了方法的重载。

注意:想要函数重载,你得满足一下几个要求

1. 方法名必须相同
2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
3. 与返回值类型是否相同无关 

还是举个例子帮助理解:

public class TestMethod {
public static void main(String[] args) {
add(1, 2); // 调用add(int, int)
add(1.5, 2.5); // 调用add(double, double)
add(1.5, 2.5, 3.5); // 调用add(double, double, double)
}
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
}

 方法签名

在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那 为什么类中就
可以定义方法名相同的方法呢?
方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式: 方法全路径名 + 参数列表 + 返回值类型,构成
方法完整的名字。

这就是方法重载这个概念建立的基础。 

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);
}
}

Java递归

从前有坐山,山上有座庙,庙里有个老和尚给小和尚将故事,讲的就是:
" 从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事,讲的就是:
" 从前有座山,山上有座庙 ..."
" 从前有座山 ……"

这小段话完美诠释了递归的思想,就是在方法中调用自己的行为。 

 

递归的必要条件:
1. 将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同
2. 递归出口

这里利用递归求一下n的阶乘

public class Main {public static int factor(int n){if(n==0){return 1;}else{return n*factor(n-1);}}public static void main(String[] args) {int n=5;int ret=factor(n);System.out.println(ret);}
}

 递归执行过程分析

这里要强调的是递归写出来的代码,对比其他的代码往往比较简洁清晰,但是我们知道,方法调用结束时才会释放它在内存中的数据,而递归他会在每一次递归的过程时产生一个新的方法的调用,这样会给内存很大负担,影响运行效率。 

递归练习

这里给大家几道递归的题,让大家体会一下递归的快乐:

按顺序打印一个数字的每一位 ( 例如 1234 打印出 1 2 3 4):
public static void print(int num) {
if (num > 9) {
print(num / 10);
}
System.out.println(num % 10);
}
递归求 1 + 2 + 3 + ... + 10
public static int sum(int num) {
if (num == 1) {
return 1;
}
return num + sum(num - 1);
}
写一个递归方法,输入一个非负整数,返回组成它的数字之和 . 例如,输入 1729, 则应该返回
1+7+2+9 ,它的和是 19
public static int sum(int num) {
if (num < 10) {
return num;
}
return num % 10 + sum(num / 10);
}

利用递归的方法写一个求斐波那契数列的程序

public static int fib(int n) {
if (n == 1 || n == 2) {
return 1;
}
return fib(n - 1) + fib(n - 2);
}

       好了,这就是java中的方法的一些基础知识了,大家可以对比C语言中的函数进行对比记忆,如果有问题的话大家直接私信我,或者评论区留言,看到就会解答哦~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/475582.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024/2/18:IO进程线程

作业1&#xff1a;使用fgets统计给定文件的行数 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {//定义FILE *类型的句柄FILE *fpNULL;//判断是否进行了外部传参if(argc ! 2){pri…

2.14日学习打卡----初学Zookeeper(一)

2.14日学习打卡 目录: 2.14日学习打卡Zookeeper概念一. 集中式到分布式单机架构集群架构什么是分布式三者区别 二. CAP定理分区容错性一致性可用性一致性和可用性的矛盾一致性和可用性如何选择 三. 什么是Zookeeper分布式架构Zookeeper从何而来Zookeeper介绍 四. 应用场景数据发…

mysql 2-18

加密与解密函数 其他函数 聚合函数 三者效率 GROUP BY HAVING WHERE和HAVING的区别 子查询 单行子查询和多行子查询 单行比较操作符 多行比较操作符 把平均工资生成的结果当成一个新表 相关子查询 EXISTS 一条数据的存储过程 标识符命名规则 创建数据库 MYSQL的数据类型 创建表…

WordPress管理员修改自己用户名的插件Username

有一些站长在刚开搭建WordPress网站时&#xff0c;对于管理员的用户名是随意输入&#xff0c;后来想要修改时发现不懂得如何下手。其实&#xff0c;修改WordPress管理员用户名最快速的方法就是进入数据库直接修改&#xff0c;详见『通过phpMyAdmin直接修改WordPress用户名的图文…

万字长文!非常详细!操作系统【内存管理】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 本文配套PDF文件&#xff0c;请浏览至文章底部下载。 1 内存管理基础概念1.1 总览1.2 内存管理应有的功能1.2.1 内存空间的分配和回收1.2.2 从逻辑上扩充内存1.2.3 地址转…

品牌/企业/人物百度百科创建攻略:一文掌握百度百科创建与审核要点

在数字化时代&#xff0c;百科全书已经成为大众获取知识和信息的重要渠道。无论是品牌、企业还是个人&#xff0c;拥有一个专属的百度百科词条&#xff0c;不仅可以提升知名度&#xff0c;还可以展现自己的实力和特色。那么&#xff0c;如何创建百度百科词条&#xff0c;并通过…

windows安装Mysql解压版

windows安装Mysql解压版 一、下载mysql-8.0.36-winx64.zip二、解压三、配置3.1. 添加环境变量&#xff1a;新建MYSQL_HOME3.2.如何验证是否添加成功&#xff1a;必须以管理员身份启动3.3. 初始化MySQL&#xff1a;必须以管理员身份启动3.4. 注册MySQL服务&#xff1a;必须以管理…

【软考中级备考笔记】数据的表示和校验码

2024/2/18 – 数据的表示和校验码 天气&#xff1a;阴雨 春节假期结束后第一个工作日&#xff0c;开始备考中级软件工程师。 希望在今年5月底的软考中取得中级证书 视频地址&#xff1a;https://www.bilibili.com/video/BV1Qc411G7fB 1. 计算机的总体架构 从下图中可以看出&am…

文件上传漏洞--Upload-labs--Pass03--特殊后缀与::$DATA绕过

方法一&#xff1a;特殊后缀绕过&#xff1a; 一、什么是特殊后缀绕过 源代码中的黑名单禁止一系列后缀名 之外的后缀&#xff0c;称之为‘特殊后缀名’&#xff0c;利用其来绕过黑名单&#xff0c;达到上传含有恶意代码的文件的目的。 二、代码审计 接下来对代码逐条拆解进行…

网络安全实验(三)

1.办公区设备可以通过电信和移动两条链路上网&#xff0c;且需要保留一个公网ip不能用来转换 2.分公司设备可以通过两条链路访问到dmz区域的http服务器 3.分公司内部客户端可以通过公网地址访问到内部服务器 4.FW1和FW3组成主备模式的双击热备 5.办公区上网用户限制流量不超…

鸿蒙开发系列教程(二十四)--List 列表操作(3)

列表编辑 1、新增列表项 定义列表项数据结构和初始化列表数据&#xff0c;构建列表整体布局和列表项。 提供新增列表项入口&#xff0c;即给新增按钮添加点击事件。 响应用户确定新增事件&#xff0c;更新列表数据。 2、删除列表项 列表的删除功能一般进入编辑模式后才可…

东方通TongWeb启动报cache问题解决

启动东方通&#xff0c;应用系统报错如下&#xff1a; [Unable to add the resource at [/WEB-INF/lib/ojdbc6-11.2.0.3.jar] to the cache because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum si…