Java方法(函数)

news2024/9/22 7:33:32

文章目录

  • Java方法(函数)
    • 一、方法介绍
    • 二、方法的定义和调用格式
      • 1. 快速入门
      • 2. Debug查看方法的执行流程
      • 3. 方法调用内存图解
      • 4. 带参数方法的定义和调用
        • 1)定义和调用格式
        • 2)形参和实参
      • 5. 带返回值方法的定义和调用
      • 6. 方法通用定义格式
    • 三、方法常见问题
    • 四、方法重载
      • 1. 方法重载关系的要求
      • 2. 方法重载的好处

Java方法(函数)

一、方法介绍

方法(method)一段具有独立功能的代码块,不调用就不执行

方法的出现:

  • 可以将挤在一起的臃肿代码,按照功能进行分类管理
  • 方法的出现,可以提高代码的复用性

二、方法的定义和调用格式

1. 快速入门

定义格式:

public static void 方法名() {  
    // 方法体
}
//举例
public static void show() {  
    // 方法体
}

调用格式:

方法名(); 
show();  

我们先通过代码来了解一下方法的使用:

package cn.edu.hgu.method;

public class MethodDemo1 {
    /*
        方法(函数)介绍:一段具有独立功能的代码块,不调用就不执行。

        好处:
           - 可以将挤在一起的臃肿代码,按照功能进行分类管理,提高代码的可阅读性
           - 方法的出现,可以提高代码的复用性

        定义格式:

            public static void 方法名() {
                // 方法体
            }

        方法的调用格式:

            方法名();
        注意事项:
            1.方法与方法之间是平级关系,不允许嵌套定义
            2.方法不调用就不执行
            3.方法的定义顺序,和执行顺序无关,要想梳理执行顺序,就看调用顺序
     */
    public static void main(String[] args) {
        farmer();
        cook();
        me();
    }

    public static void farmer() {
        System.out.println("除草");
        System.out.println("耕地");
        System.out.println("播种");
        System.out.println("浇水");
        System.out.println("收割");
    }

    public static void cook() {
        System.out.println("买菜");
        System.out.println("洗菜");
        System.out.println("做菜");
    }

    public static void me() {
        System.out.println("点菜");
        System.out.println("吃菜");
    }
}

输出结果为:

image-20230117103608537

注意事项:

  1. 方法与方法之间是平级关系,不允许嵌套定义
  2. 方法不调用就不执行
  3. 方法的定义顺序,和执行顺序无关,要想梳理执行顺序,就看调用顺序

我们初步了解了方法的定义、调用以及相关的注意事项,下面我们通过一个案例来巩固一下所学内容:

需求:定义一个方法,方法中定义两个整数变量, 求出最大值并打印在控制台

分析:

  • 根据格式编写方法,方法名自己给出 (见名知意 小驼峰命名法)
  • 方法内部定义出两个 int 类型变量
  • 使用三元运算符求出最大值
  • 调用该方法,让内部的逻辑执行起来

代码如下:

package cn.edu.hgu.test;

public class MethodTest {
    public static void main(String[] args) {
        getMax();
    }

    /*
        需求:定义一个方法,方法中定义两个整数变量,  求出最大值并打印在控制台
     */
    public static void getMax() {
        int num1 = 10;
        int num2 = 20;

        int max = num1 > num2 ? num1 : num2;
        System.out.println(max);
    }
}

输出结果为:20

2. Debug查看方法的执行流程

以刚才的 MethodTest 方法为例,我们稍加修改来使用 Debug 查看方法的执行流程:

使用Debug运行代码:

image-20230117132503370

点击 Step into 进入方法:

image-20230117132937955

点击 Step Over 执行语句:

image-20230117133118639

点击 Step Out 跳出当前方法:

image-20230117133224091

3. 方法调用内存图解

  • 方法没有被调用的时候,在方法区中的字节码文件中存放
  • 方法被调用的时候,需要进入到栈内存中运行

image-20230117133659692

我们通过下图来了解方法调用内存的步骤:
在这里插入图片描述

通过这张图,我们对方法调用内存已经有了一定的了解。

下面,我们来看一个实例:

package cn.edu.hgu.method;

public class MethodDemo2 {
    public static void main(String[] args) {
        study();
    }

    public static void sleep() {
        System.out.println("睡觉");
    }

    public static void eat() {
        System.out.println("吃饭");
    }

    public static void study() {
        eat();
        System.out.println("学习");
        sleep();
    }
}

输出结果为:

image-20230117144414287

4. 带参数方法的定义和调用

在前面我们在使用方法的时候,使用的固定的数,这样显然不太灵活。。。

image-20230117153429901

下面我们对代码做一下修改,改为带参数的方法:

package cn.edu.hgu.test;

public class MethodTest {
    public static void main(String[] args) {
        getMax(30, 72);
    }
    
    public static void getMax(int num1, int num2) {

        int max = num1 > num2 ? num1 : num2;
        System.out.println(max);
    }
}

输出结果为:72

这样,我们调用方法的时候,只需要在调用的时候修改里面的参数就可以了。

1)定义和调用格式

定义格式:

public static void 方法名 (数据类型 变量名) {  
    // 方法体
}

public static void 方法名(数据类型 变量名1,数据类型 变量名2... ) {  
    // 方法体
}
//举例
public static void call (String name) {  
    ...
}
public static void add (int a, int b) {  
    ...
}

调用格式:

方法名(参数);
方法名(参数1, 参数2);
//举例
call("钢门吹雪");
add(10,20);

2)形参和实参

形参:全称形式参数,是指在定义方法时,所声明的参数

实参:全称实际参数,调用方法时,所传入的参数

image-20230117154700957

5. 带返回值方法的定义和调用

为什么要有带返回值的方法?

我们经常会根据一个方法产出的结果,来去组织另外一段代码逻辑,为了拿到这个方法产生的结果,就需要定义带有返回值的方法

定义格式:

public static 数据类型 方法名 (数据类型 变量名1,数据类型 变量名2... ) {  
      return 数据值;
}
//举例
public static int add (int a, int b) { 
    int c = a + b; 
    return c;
}
public static double getNum () {  
    return 12.3;
}

调用格式:

数据类型 变量名 = 方法名(参数...);
//举例
int result = add(10,20);

6. 方法通用定义格式

public static 返回值类型 方法名( 参数 ) {
   方法体; 
   return 数据 ;
}

  • 定义方法时,要做到两个明确明确参数:
    • 主要是明确参数的类型和数量
    • 明确返回值类型:主要是明确方法操作完毕之后是否有结果数据,如果有,写对应的数据类型,如果没有,写void
  • 调用方法时
    • void类型的方法,直接调用即可
    • 非void类型的方法,推荐用变量接收调用

三、方法常见问题

  • 方法不调用就不执行
  • 方法与方法之间是平级关系,不能嵌套定义
  • 方法的编写顺序和执行顺序无关
  • 方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写,如果要编写return,后面不能跟具体的数据。
  • return语句下面,不能编写代码,因为永远执行不到,属于无效的代码

四、方法重载

需求:提供 4 个计算方法,方法功能如下

  1. 计算两个整数相加的和
  2. 计算两个小数相加的和
  3. 计算三个整数相加的和
  4. 计算三个小数相加的和
public class Test {
	public static int add1(int a, int b) {
    	return a + b;
    }
	public static double add2(double a, double b) {
     	return a + b;
     }
	public static int add3(int a, int b, int c) {
         return a + b + c;
     }
	public static double add4(double a, double b, double c) {
         return a + b + c;
     }
}

如果我们按照上面这样写,需要我们定义四个不同的方法,但实际上这四个方法都是对参数进行求和操作:

image-20230117165546959

那么,我们是否可以只使用一个方法名,通过不同参数,从而实现不同的功能:

image-20230117165841844

1. 方法重载关系的要求

在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系

简单记:同一个类中,方法名相同,参数不同的方法

​ 参数不同:个数不同、类型不同、顺序不同

注意:识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关。

image-20230117170022240

我们再来看一个例子:

image-20230117170052207

这个例子中的两个方法虽然参数不同,但实际上它们的参数都是一个整数和一个小数,虽然也符合重载的定义,但实际上并没有什么实际意义。

2. 方法重载的好处

不用记忆过多繁琐的方法名字

image-20230117170324808

就以我们经常使用的打印语句为例,它可以输出整数、小数、字符串、布尔类型等数据。

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

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

相关文章

MIPI 摄像头的原理

1. 摄像头sensor 的原理 定时脉冲生成器会生成clock,用于访问image sensor 阵列中的行,预充电,并且按顺序采样像素阵列中的所有行。在一个行的预充电和采样的时间段里,像素的电荷量会随着曝光时间而逐渐减少。这就是快门结构中的曝…

擎创技术流 | ClickHouse实用工具—ckman教程(10)

一、前言 哈喽~友友们,转眼农历新年就在眼前,ckman系列也终于迎来了最后一期,非常感谢大家的喜欢,让up主有动力做完这个系列,也感谢一路走来,大家给予的反馈,让这个系列越做越好。 接下来&…

4-Spring使用

目录 1.存储Bean对象到Spring容器中 1.1.创建Bean 1.2.将Bean注册到Spring容器中 1.2.1.第一次存储Bean(可选,如果是第二次及以后,此步骤忽略) 1.2.2.添加Bean标签 2.从Spring容器中获取并使用Bean对象 2.1.创建Spring上下…

剑指 Offer 04. 二维数组中的查找 [C语言]

目录题目思路代码结果该文章只是用于记录考研复试刷题题目 在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数&#xff…

[leetcode 1723] 完成所有工作的最短时间

题目 题目:https://leetcode.cn/problems/find-minimum-time-to-finish-all-jobs/description/ 该题和 [leetcode 2305] 公平分发饼干 完全相同。 解法 回溯剪枝 感觉和 [leetcode 198] 划分为k个相等的子集 有点相似,这题更像是划分为k个尽量相等的子…

easypoi 模板导入、导出合并excel单元格功能

easypoi 模板导入、导出合并单元格功能 参考: java使用poi读取跨行跨列excel springboot集成easypoi并使用其模板导出功能和遇到的坑 Easypoi Excel模板功能简要说明 easypoi 模板导出兼容合并单元格功能 ExcelUtil package com.yymt.utils;import cn.aftertu…

linux系统中利用QT实现环境传感器的数据获取方法

大家好,今天主要和大家分享一下,如何使用QT实现对三合一环境传感器的数据的获取和实现。 目录 第一:资源介绍 第二:具体代码的详细实现 第三:源文件“mainwindow.h”实现 第四:Linux应用接口获取数据 第…

大趋势:科技赋能产业

能整合传统产业资源的老板大优势! 三大趋势: 科技赋能产业链 乡村振兴 文化复兴 纯技术类企业在产业链方面不占优势 趣讲大白话:时势造英雄 ******** 消费互联网竞争太卷了 竞争向产业升级方向转移 向高质量发展导向 乡村振兴是整合分散的集…

容器虚拟化技术Docker(一)简介、安装、常见命令、数据卷、安装常规软件

容器虚拟化技术Docker(一)简介、安装、常见命令、数据卷、安装常规软件 1、Docker简介 1、简介 Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理&a…

web3:同态加密

web3相关学习一并收录至该博客:web3学习博客目录大全 目录同态加密概念同态加密具体如何定义?主流同态加密算法原理乘法同态加密算法① RSA算法一些基本的数学知识RSA的具体过程秘钥的产生加密解密验证了 RSA 算法的乘法同态性java代码简单实现python代码…

保时捷狂推NFT,高调喊出打造Web3社区,Web2品牌“天生缺陷”终将折戟沉沙?...

图片来源:由无界 AI 绘画工具生成2023年1月,保时捷中国的公关团队“忙疯”了,一连搞了好几个活动。有展览,媒体连线直播,甚至搞起了一场有圆桌,有嘉宾主题演讲的发布会。目的只有一个,告诉中国用…

6、Ubuntu20的JDKMySQLtomcatRedisNginx安装

安装JDK 这里以安装版本8为例 进入存放jdk目录创建目录 cd /usr/local mkdir jdk cd jdk 把下好的jdk8压缩包拖拽到Ubuntu连接用户下 移动jdk包文件 mv /home/starfish/jdk-8u351-linux-x64.tar.gz . 解压jdk tar -zxvf jdk-8u351-linux-x64.tar.gz cd jdk1.8.0_351/ p…

ubuntu20.04安装搜狗sogou输入法

环境 Ubuntu20.04 Sogou拼音输入法安装过程 Step.1 安装fcitx框架 sudo apt-get update sudo apt-get install fcitx输入winA后,打开Languate Support Keyboard input method system中,选择fcitx 点击Install/RemoveLanguates...,选择Ch…

面向物流行业的文档管理系统

用于运输和物流的 DocuWare 文档管理软件 物流和货运行业的效率激烈战在公路、火车、货船和空中展开。DocuWare 的快速、安全和灵活的文档管理是真正的竞争优势。在您的公司和客户的核心流程中节省新的成本和时间。 一、数字化和文档管理软件改变了物流公司的游戏规则 智能链…

PostgreSQL 技术内幕(五)Greenplum-Interconnect模块

Greenplum是在开源PostgreSQL的基础上,采用MPP架构的关系型分布式数据库。Greenplum被业界认为是最快最具性价比的数据库,具有强大的大规模数据分析任务处理能力。 Greenplum采用Shared-Nothing架构,整个集群由多个数据节点(Segm…

mycat数据分片

Mycat是一个彻底开源的,面向企业应用开发的大数据库集群。它的定义是是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以…

【题解】2023牛客寒假算法基础集训营1

目录A. World Final? World Cup! (I)思路B. World Final? World Cup! (II)C. 现在是,学术时间 (I)思路D. 现在是,学术时间 (II)思路E. 鸡算几何思路F. 鸡玩炸蛋人思路G. 鸡格线思路H. 本题主要考察了DFS思路I. 本题也主要考察了DFSJ. 本题竟也主要考察…

MySQL详细教程,2023硬核学习路线,看这一篇就够了

文章目录前言1. 数据库的相关概念1.1 数据1.2 数据库1.3 数据库管理系统1.4 数据库系统1.5 SQL2. MySQL数据库2.1 MySQL安装2.2 MySQL配置2.2.1 添加环境变量2.2.2 新建配置文件2.2.3 初始化MySQL2.2.4 注册MySQL服务2.2.5 启动MySQL服务2.3 MySQL登录和退出2.4 MySQL卸载2.5 M…

PR基础知识

sh什么是帧,什么是帧速率,什么是方形像素? 什么叫场序? # 时长 s时i长为视频时间得长度,基本单位为秒。但是在PR软件中。有更为精准得时间单位计算为帧。也就是说把1秒分为若干份。一份就是一帧。一帧也就可以理解为一张图片。 s所以在PR…

联合证券|未来五年是“大信创”发展的关键时期 发展空间广阔

机构指出,展望2023年,信创将从党政信创走向全面信创(28N),叠加方针催化及疫情预期转变,泛信创范畴有望成为板块主线,孕育出许多板块的出资机会。 中心逻辑 1、2022年计算机职业大都子板块的增长…