Java中的方法是什么?(Java系列2)

news2025/7/8 15:11:24

目录

前言:

1.什么是方法

2.方法的定义

3.方法调用的执行过程

4.实参和形参的关系

5.方法重载

6.方法签名

7.递归

8.关于“调用栈”

结束语:


前言:

在上一次博客中小编主要和大家分享了Java中的一些基础知识,与小编之前和大家分享的C语言没有太大的区别,但是从这次开始小编就要和大家分享一些Java中与C语言不一样的地方了,准备好接收哦!

1.什么是方法

首先我们得明白什么是方法,所谓方法就是一个代码片段,类似于C语言当中的函数。

方法存在的意义:

  • 是能够模块化的组织代码。
  • 做到代码可以被重复使用,一份代码可以被用于多个地方。
  • 让代码理解起来更加简洁。
  • 直接调用现有的代码“开方”,不必重新造轮子。

2.方法的定义

语法格式:

[]中的值表示可以加也可以不加。

修饰符 返回值类型 方法名称 ([参数类型 形参]) {

        方法体代码;

        [return 返回值];

}

注意:

  • 修饰符现阶段直接使用public static固定搭配。
  • 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void。
  • 方法名字,采用小驼峰命名。
  • 参数列表:如果方法没有参数,()中什么都不写;如果有参数,需要指定参数类型,多个参数之间使用逗号隔开。
  • 方法体:是方法内部要执行的语句。
  • 在Java当中,方法必须写在类当中。
  • 在Java当中,方法不能嵌套定义。
  • 在Java当中,没有方法声明这么一说。 
  • 在Java当中,方法可以放在任何的位置,都会被调用,不需要像C语言当中一样需要放在主函数之前不用声明,放在主函数或者是放在其它地方就需要被声明。

3.方法调用的执行过程

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

代码如下所示:

import java.util.Scanner;

public class Test1 {
    public static int Add(int x, int y) {
        return x + y;
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int a = scan.nextInt();
        int b = scan.nextInt();
        int ret = Add(a,b);
        System.out.println(ret);
    }
}


结果如下所示:

解析:


 

4.实参和形参的关系

在Java中,实参值永远都是拷贝到形参中去的,形参和实参本质是两个实体。形参的名字可以随意取。

我们可以看到下面代码中被调用方法中的值已近被交换了,但是主方法中却没有被交换。这样我们就可以更加确信实参与形参是两个实体了。

代码如下所示:

import java.util.Scanner;

public class Test2 {
    public static void Swap(int x, int y) {
        int tmp = 0;
        tmp = x;
        x = y;
        y = tmp;
        System.out.println("Swap方法中的:" + x + " " + y);
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        Swap(a,b);
        System.out.println("主方法中的:" + a + " " + b);
    }
}

结果如下所示:

5.方法重载

在Java中如果多个方法名字相同,但是参数列表不同,则称该种方法被重载了。

注意:

  • 方法名必须相同。
  • 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)。
  • 与返回值的类型是否相同无关。
  • 编译器在编译代码的时候会对实参类型进行推演,根据推演的结果来确定调用哪个方法。

代码如下所示:

public class Test3 {
    public static int Sum(int a, int b) {
        return a + b;
    }
    public static int Sum(int a, int b, int c) {
        return a + b + c;
    }
    public static double Sum(double a, double b) {
        return a + b;
    }
    public static double Sum(double a, double b, double c) {
        return a + b + c;
    }
    public static double Sum(int a, double b) {
        return a + b;
    }
    public static double Sum(double b,int a) {
        return a + b;
    }
    public static void main(String[] args) {
        int ret1 = Sum(10,20);
        System.out.println(ret1);
        System.out.println("==============");
        System.out.println(Sum(3.2, 9));
        System.out.println("==============");
        System.out.println(Sum(2,4.1));
        System.out.println("==============");
        System.out.println(Sum(1,2,3));
        System.out.println("==============");
        System.out.println(Sum(1.2,2.3,3.4));
    }
}

结果如下所示:

 

6.方法签名

在同一个作用域中不能定义两个相同名称的标识符,比如:方法中不能定义两个名字一样的变量,那么为什么类中就可以定义方法名相同的方法呢?

其实它是经过编译器编译修改之后最终的名字。具体的方法:方法全路径名+参数列表+返回值类型,构成方法的完整的名字

7.递归

自身中又包含了自己,一个方法在执行过程中调用自身,就称为递归。

递归的必要条件:

  • 将问题划分成子问题,注意:子问题必须要与原问题的解法一致。
  • 要有递归出口。

我们直接看一个经典的案例:河内塔。 

代码如下所示:

public class Test4 {
    /**
     * @param n 几个盘子
     * @param pos1 起始位置
     * @param pos2 中转位置
     * @param pos3 目的位置
     */
    public static void move(char pos1,char pos2) {
        System.out.print(pos1 + "->" + pos2 + " ");
    }
    public static void Hanoi(int n, char pos1, char pos2, char pos3) {
        if(n == 1) {
            move(pos1,pos3);
            return;
        }
        Hanoi(n - 1,pos1,pos3,pos2);
        move(pos1,pos3);
        Hanoi(n - 1,pos2,pos1,pos3);
    }
    public static void main(String[] args) {
        Hanoi(1,'A','B','C');
        System.out.println();
        Hanoi(2,'A','B','C');
        System.out.println();
        Hanoi(3,'A','B','C');
        System.out.println();
    }
}

结果如下所示:

8.关于“调用栈”

方法调用的时候,会有一个“栈”这样的内存空间描述当前的调用关系,称为调用栈。

每一次的方法调用就称为一个“战帧”,每个栈帧中包含了这次调用的参数是哪些,返回到哪里继续执行等信息。

结束语:

这次小编就给大家分享到这里啦如果想要深入了解Hanoi的同学可以去看小编写的C语言这篇:http://t.csdn.cn/ezdy1 ,希望对大家有所帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)

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

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

相关文章

Python多任务编程

1.进程与多任务 1. 1 多任务的介绍 1.使用多任务能充分利用CPU资源,提高程序的执行效率,让程序具备处理多任务的能力。 2.多任务执行方式有两种: 并发:在一段时间内交替执行多个任务。 并行:在一段时间内真正的同…

第三周 青海之行——练练构图,培养你的摄影眼

目录3.1 油菜花海,怎么拍更好看?3.2 构图的元素:线条、形状、图案(一)3.3 构图的元素:光影、留白、框景(二)3.4 摄影构图 补充内容构图作业3.1 油菜花海,怎么拍更好看? 祁连山下的百里油菜花海 门源 雪山下…

冲冲冲!!!python计算机二级每日一套_8

文章目录一、选择题二、基本操作三、简单应用四、综合应用声明:例题均来源于网络,仅供学习笔记,若涉侵权请联系删除。所属练题来源于《小黑课堂》一、选择题 1、树的度为3,共有31个结点,但没有度为1和2的结点。则该树…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: clear

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/clear/ 公有成员函数 <deque> std::deque::clear C98 void clear(); C11 void clear() noexcept;清除内容 从deque中删除所有元素&#xff08;已销毁&#xff09;&#xff0c;使容器的size为0。…

MBIST BAP(Bist Access Port)直接访问接口(1)

More articles You can follow the official account&#xff1a;“IC练习生” IC民工不定期更新 BAP BAP会覆盖掉连接到BAP上的memory的一些默认操作模式; 通过消除串行配置控制器的shift cycle,大大缩短测试时间,代价是在BAP和控制器之间额外的连接; BAP的高级访问属性部分…

【渝偲】DSPE-PEG-Mannose磷脂聚乙二醇甘露糖;科研试剂

DSPE-PEG-Mannose磷脂聚乙二醇甘露糖 DSPE-PEG-Mannose 磷脂聚乙二醇甘露糖 英文名称:DSPE-PEG-Mannose 中文名称:磷脂聚乙二醇甘露糖 结构式&#xff1a; 性状: PEG2000分子量为白色粉末溶剂:溶于大部分有机溶剂&#xff0c;如&#xff1a;DCM、DMF、DMSO、THF等等。在水中…

【Linux进程间通信】 管道

这里写目录标题管道有名管道无名管道在使用无名管道时为什么要关闭不使用的另外一端&#xff1f;IPC机制&#xff1a;管道&#xff0c;信号量&#xff0c;共享队列&#xff0c;消息队列&#xff0c; 套接字。 管道&#xff0c;信号量&#xff0c;共享队列&#xff0c;消息队列…

[附源码]SSM计算机毕业设计中青年健康管理监测系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Design A Pastebin

title: Notes of System Design No.03 — Design a PasteBin description: Design a PasteBin ’ date: 2022-05-13 18:01:58 tags: 系统设计 categories: 系统设计 00. What is Pastebin? 这是一个网站 在输入框输入文本 网站上会生成一个URL链接 别人可以通过这个链接 …

【图神经网络论文整理】(一)—— 可解释性和泛化性图分类的因果注意力:CAL

KDD 22: Proceedings of the 28th ACM SIGKDD Conference on Knowledge Discovery and Data MiningAugust 2022Pages 1696–1705论文地址 本文介绍的论文是中科大王翔教授等人在KDD2022上发表的《Causal Attention for Interpretable and Generalizable Graph Classification》…

【数据处理】Python matplotlib绘制双柱状图以及绘制堆积柱状图——保姆级教程

Python matplotlib绘制双柱状图以及绘制堆积柱状图双柱状图一、双柱状图的原理二、双柱状图的完善1. 增加图片标题2. 增加x轴y轴标题3. 增加x轴注释四、完整代码堆积柱状图一、堆积柱状图的绘制原理二、plt.bar参数介绍三、完整代码&#xff1a;双柱状图 一、双柱状图的原理 …

机器人C++库(12)Robotics Library 之指定路径规划算法

机器人C库&#xff08;12&#xff09;Robotics Library 之路径规划算法&#xff1a;PRM、RRT、EET算法 RL库的运动规划(rl::plan)模块集成了以下经典的路径规划算法&#xff1a; PRM算法:概率路线图算法RRT算法&#xff1a;快速探索随机树算法EET算法&#xff1a;搜索树算法-基…

java计算机毕业设计ssm基金分析系统的设计与实现

项目介绍 计算机信息技术的发展,推动了基金信息化管理的进程,并随着互联网&#xff1a;概念的提出,各种互联网&#xff1a;软件也应运而生。在传统的管理中,各种信息管理难,传播速度慢,需要耗费很长时间统计核查,不能满足现代化的发展需求,基于JAVA的基金分析系统的提出解决了…

python+django家政服务中介网站系统

通常 一个Django model 对应一张数据表&#xff0c;model是以类的形式表现的 实现了ORM 对象与数据库映射 隐藏了数据访问细节 不需要写sql语句 admin是Django自带的 自动化数据管理界面 前端技术&#xff1a;nodejsvueelementui 我们最初的项目结构由五个文件组成&#xf…

《树莓派项目实战》第六节 使用超声波模块测距

目录 6.1 引脚介绍 6.2 工作原理 6.3 使用注意 6.4 连接到树莓派 6.5 编写代码输出距离 在本节&#xff0c;我们将学习如何使用HC-SR04超声波模块测量前方障碍物的距离&#xff0c;该项目设计到的材料有&#xff1a; 树莓派 * 1面包板 * 1杜邦线若干HC-SR04超声波模块* 1…

Mysql进阶之索引与视图和三大范式

1、索引&#xff08;index&#xff09; 1.1、什么是索引&#xff1f; 索引是在数据库表的字段上添加的&#xff0c;是为了提高查询效率存在的一种机制。 一张表的一个字段可以添加一个索引&#xff0c;当然&#xff0c;多个字段联合起来也可以添加索引。 索引相当于一本书的…

redis搭建主从、redis搭建集群、redis中StrictRedis()、RedisCluster()方法与python交互

一、StrictRedis方法 创建对象&#xff0c;指定host、port、db与指定的服务器端口连接&#xff0c;其中默认host为localhost、port为6379、db为0&#xff0c;不同类型调用的实例方法不同&#xff0c;与redis命令一致&#xff0c;方法需要的参数与命令参数一致 from redis imp…

Xavier(8):Xavier使用速腾聚创激光雷达运行a-loam算法部分报错与解决方案

文章目录1 速腾聚创激光雷达驱动报错&#xff1a;Project cv_bridge specifies /usr/include/opencv as an include dirProject grid_map_cv specifies /usr/include/opencv as an include dir2 a-loam算法报错&#xff1a; fatal error: opencv/cv.h: 没有那个文件或目录报错&…

无线社工基础

无线社工基础 一些社会工程学密码生成器&#xff08;百度&#xff09; Crunch工具 /usr/share/crunch/charset.lstcrunch 最短长度 最长长度 字符集 选项crunch 8 12 -f /usr/share/crunch/charset.lst ualpha -o /root/pass.txt Windows下对附近无线网络进行扫描 WirelessMon…

MySQL事务/事务与数据库底层数据/多点回滚/隔离级别/悲观锁和乐观锁/锁模式和分类/相关锁总结/JDBC事务实现

文章目录MySQL事务概述事务事务与数据库底层数据事务控制语句事务处理基本测试多点回滚相关日志问题redo logundo log隔离级别常见问题事务隔离性隔离级别的范围总结隔离等级读未提交读已提交可重复读串行化并发写问题幻读问题悲观锁和乐观锁锁模式锁分类按加锁方式分类按照算法…