Java 方法简介

news2024/12/22 22:05:51

如果需要经常做某一操作,则需要重复写类似的代码,比如查找某个数。此外,某些复杂的操作需要分成多个步骤进行,以便理解和维护。

为此,计算机引入了函数的概念,用来减少重复代码,分解复杂操作。

与数学中的函数类似,Java 函数又称方法,有方法名,参数(0或多个,类比 x ),结果(0或1个,类比 y)。

方法的基本结构

修饰符 返回值类型 函数名(参数类型 参数名, ...) {
    // 操作
    return 返回值;
}
public static void test(int a){
    System.out.println(a);
}
  • 修饰符

可选,有权限修饰符、static、final、abstract 等。

  • 返回值类型

如果没有返回值,返回值类型设为 void;

如果返回值类型不为 void,则必须返回,且 return 返回值的数据类型和声明的返回值类型必须一致。

  • 参数

可选,也叫形参,由参数类型和参数名组成,可以看成作用域在方法内的局部变量,负责接收外部参数,调用方法时传递参数实际就是给形参赋值。

可变参数:个数不定的参数,必须是参数列表的最后一个,一个方法内只能有一个可变长度参数。语法是在数据类型后面加三个点 ...,会转换为数组。

public static int getSum(int... a){
	// todo
	return 0;
}
  • return

return 用于显式结束函数执行,返回调用方,没有 return 时,执行到方法结尾自动返回调用方。

可选,返回值类型为 void 时,return 不是必需的。

return 可以用于方法内的任何地方,可以结合选择结构来提前结束方法执行,返回调用方。

public static void test(){
  int a = 1;
  int b = 2;
  if(a == b){
    return;
  }
  System.out.println("a 不等于 b");
}

函数可以调用同一个类中的其他函数,也可以调用其他类中的函数。

方法重载

同一个类中,方法名相同,参数签名不同,称为方法重载,与返回值无关。

参数签名不同指:参数类型不同 或 参数个数不同 或 参数类型顺序不同。

public class Math {
   public static double max(double a, double b)
   public static float max(float a, float b)
   public static int max(int a, int b)
   public static long max(long a, long b)
}

⭐方法调用的参数匹配

调用方法的时候,参数传递实际上是给参数赋值,传递的数据类型需要与函数声明的参数数据类型兼容,在没有重载的情况下,只要可以进行类型转换,就会调用该方法,在有重载的情况下,会调用最匹配的方法。

char a = 'a';
char b = 'b';
System.out.println(Math.max(a, b));

⭐方法调用的基本原理

程序从 main 方法开始执行,碰到函数调用的时候,会跳转进函数内部,函数返回后会继续执行调用后面的语句,返回到 main 方法并且 main 方法没有要执行的语句后程序结束。

方法调用可以看作无条件跳转,跳转到方法对应的指令处开始执行,方法执行完毕或者遇到 return 语句的时候,再无条件跳转回调用处,执行方法调用后的下一条指令。

计算机系统使用栈内存来存放方法调用过程中需要的数据,包括参数、返回地址以及方法内定义的局部变量,返回值不太一样,可以简单认为内存中存在一个专门的 返回值存储器

栈是一块内存,一般是先进后出,类似于一个桶,往栈里放数据称为入栈,最下面称为栈底,最上面称为栈顶,从栈顶拿出数据通常称为出栈。栈一般是从高位地址向低位地址扩展,栈底的内存地址是最高的,栈顶的是最低的。

每调用一次方法,都会将相关方法的数据入栈,调用结束出栈,main 方法的数据在栈的最下面。

public class Sum {
  
  public static void main(String[] args){
    int d = Sum.sum(1,2);
    System.out.println(d);
  }
  
  public static int sum(int a,int b){
    int c = a + b;
    return c;
  }
}

image

如上,程序从 main 方法开始执行,main 方法入栈,main 方法有一个 args 参数用来接收用户输入,然后定义了一个局部变量 int d,接收 sum 方法的返回值。

调用 sum 方法,sum 方法入栈,传入参数 1、2 以及返回地址,sum 方法中定义了一个局部变量 int c,存储参数 a + b 计算的结果,最后 return 返回。

在返回之前,返回值暂时保存到了专门的返回值存储器中。

在返回之后,指令指示器跳转到返回地址处,sum 方法出栈,然后继续往下执行 main 方法。

递归调用

方法自己调用自己叫递归调用。

递归方法自己调用自己,直到遇到终止条件才会 return 返回,而方法调用主要是通过栈来存储相关数据,每调用一次方法就会在栈内存中开辟一块空间,当递归调用次数过多时,可能导致内存溢出,不建议使用。

public static int factorial(int n){
    if(n == 1){
        return 1;
    }
    return n * factorial(n-1);
}
/**
 * 汉诺塔问题
 */
public class HanNuoTa {

    public static void run(int num,char a,char b,char c){
        if(num < 1) {
            System.out.println("请输入正整数");
        } else if(num == 1) {
            System.out.println(a + " --> " + c);
            return;
        } else {
            run(num - 1, a, c, b);
            System.out.println(a + " --> " + c);
            run(num - 1, b, a, c);
        }
    }

    public static void main(String[] args) {
        run(3,'A','B','C');
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Servlet篇3】HttpServletResponse的常用方法

HttpServletResponse代表的是一个HTTP请求对应的响应。 在这一篇文章当中&#xff0c;已经提到了HTTP响应是由哪几部分组成的&#xff1a; 【网络原理7】认识HTTP_革凡成圣211的博客-CSDN博客HTTP抓包&#xff0c;Fiddler的使用https://blog.csdn.net/weixin_56738054/articl…

ChIP-seq 分析:数据与Peak 基因注释(10)

动动发财的小手&#xff0c;点个赞吧&#xff01; 1. 数据 今天&#xff0c;我们将继续回顾我们在上一次中研究的 Myc ChIPseq。这包括用于 MEL 和 Ch12 细胞系的 Myc ChIPseq。 可在此处[1]找到 MEL 细胞系中 Myc ChIPseq 的信息和文件可在此处[2]找到 Ch12 细胞系中 Myc ChIP…

UE5 报错记录

文章目录The following modules are missing or built with a different engine versionXXX could not be compiled. Try rebuilding from source manaually添加组件时提示未定义标识符或函数名法一方法二方法三The following modules are missing or built with a different e…

MediaTek 天玑 8000 5G移动平台详细参数

MediaTek 天玑 8000 移动平台 采用先进的 台积电 5nm 工艺&#xff0c;拥有出众的性能和能效&#xff0c;为高端智能手机用户提供出色的高帧率游戏和 5G 移动体验。 天玑 8000 采用了 MediaTek 诸多先进技术&#xff0c;内置 MediaTek Imagiq 780影像引擎、第五代 AI 处理器APU…

【存储】存储阵列结构

存储阵列结构存储是什么DAS&#xff08;Direct Attached Storage&#xff09;DAS遇到的挑战SAN&#xff08;Storage Area Network&#xff09;FC SAN与IP SAN比较SAN存储应用NAS&#xff08;Network Attached Storage&#xff09;NAS SAN DAS架构SAN与NAS存储的基本区别存储架构…

2023年湖北省建设厅特种工电工架子工怎么报考?甘建二告诉你

2023年湖北省建设厅特种工考试&#xff0c;本人来走过场&#xff0c;即可通过考试哟 2023年湖北省建设厅特种工工种&#xff1a;&#xff08;官方公布&#xff09; 建筑电工&#xff0c;建筑架子工&#xff0c;建筑起重信号司索工&#xff0c;建筑起重机械司机&#xff0c;塔式…

蓝桥杯 python datetime基础

datetime datetime对象可以用来表示精确的日期和时间&#xff0c;其实例化方法如下&#xff1a; import datetime today datetime.datetime(year2022,month9,day21)print(today)print(today.year)#返回datetime对象中的年份print(today.month)#返回datetime对象中的月份prin…

CentOS 7.9安装Zabbix 4.4《保姆级教程》

CentOS 7.9安装Zabbix 4.4一、配置一览二、环境准备设置Selinux和firewalld设置软件源1.配置ustc CentOS-Base源2.安装zabbix 4.4官方源3.安装并更换epel源4.清除并生成缓存三、安装并配置Zabbix Server安装zabbix组件安装php安装mariadb并创建数据库修改zabbix_server.conf设置…

volatile底层-CPU缓存一致性协议MESI

目录 volatile底层-CPU缓存一致性协议MESI CPU高速缓存&#xff08;Cache Memory&#xff09; 带有高速缓存的CPU执行计算的流程 目前流行的多级缓存结构 多核CPU多级缓存一致性协议MESI MESI协议缓存状态 MESI状态转换 多核缓存协同操作 ​编辑单核读取 双核读取 修…

Modelsim 操作结构和流程

用到的命令一般都写到.do文件中&#xff0c;使用脚本语言进行批量处理。Step 1: Map librariesStep 2: Compile the designStep 3: Optimize the design (OPTIONAL)Step 4: Load the design into the simulatorStep 5: Run the simulationStep 6: Debug the design Note: Desig…

10、DNS部署和安全(图文解析)~千锋

目录 概述 域名组成 监听端口 客户机的域名解析过程 DNS解析分类 DNS服务器搭建 概述 Domain Name Service 域名服务 作用&#xff1a;为客户机提供域名解释服务器 域名组成 域名组成概述 “www.sina.com.cn”是一个域名&#xff0c;从严格意义上讲”sina.com.cn”才…

CV学习笔记-Faster-RCNN

Faster R-CNN 文章目录Faster R-CNN1. 目标检测算法1.1 计算机视觉有五大应用1.2 目标检测任务1.3 目标检测算法概述2. 边框回归&#xff08;Bounding-Box regression&#xff09;2.1 IoU2.2 统计学中的指标2.3 边框回归3. Faster-RCNN网络3.1 Conv layers3.2 Region Proposal …

Python每日一练(20230304)

目录 1. 移除链表元素 ★ 2. K 个一组翻转链表 ★★★ 3. 三角形最小路径和 ★★ 1. 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&…

曹云金回归、于谦电影杀青,德云社想不火都难

说起民间最大的相声社团&#xff0c;首屈一指的要属德云社&#xff0c;之所以说德云社最大&#xff0c;主要是优秀相声演员够多。德云社在郭德纲的带领下&#xff0c;如今已经是人才济济&#xff0c;听说最近队伍会进一步壮大&#xff0c;前徒弟曹云金也要回归了。 当年曹云金作…

c语言期末突击讲义+笔记

【祝逢考必过&#xff0c;心想事成~~~~】 【一定能过&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;】 C 语言第一课 一、 固定格式 例 1&#xff1a; #include<stdio.h> int main() { return 0; }### 二、 printf 语句 例 1&#xff1a; #inclu…

springsession中redis键值过期后,后置处理

Redis键空间通知&#xff08;说明&#xff09; 基于redis的发布订阅功能&#xff0c;实现&#xff0c;当对一个key做出操作后&#xff0c;可以对改建进行监听&#xff0c;来做后续的处理。 在spring-session中支持当一个session过期后&#xff0c;来做一些后续的操作。那是如何…

Spring-注解注入

一、回顾XML注解 bean 配置 创建 bean public class Student { } 配置 xml bean <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSche…

2023年人工智能技术趋势

随着DALL-E 2、ChatGPT等越来越多应用的出现&#xff0c;人们越来越期待人工智能在2023年给人们带来的突破性改进。2023年人工智能技术趋势人工智能(AI)的应用越来越具有创新性&#xff0c;广泛的应用程序使用 AI 从头开始创建令人印象深刻的文本、视频和图像。越来越多的新应用…

【深度学习】扩散模型(Diffusion Model)详解

【深度学习】扩散模型&#xff08;Diffusion Model&#xff09;详解 文章目录【深度学习】扩散模型&#xff08;Diffusion Model&#xff09;详解1. 介绍2. 具体方法2.1 扩散过程2.2 逆扩散过程2.3 损失函数3. 总结4. 参考1. 介绍 扩散模型有两个过程&#xff1a; 扩散过程&…

蓝桥杯2012年省赛棋盘放麦子

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 你一定听说过这个故事。国王对发明国际象棋的大臣很佩服&#xff0c;问他要什么报酬&#xff0c;大臣说&#xff1a;请在第 11 个棋盘格放 11 粒麦子&#xff0c;在…