Java方法:重复使用的操作可以写成方法哦

news2025/1/20 19:14:18

在这里插入图片描述

  • 👑专栏内容:Java
  • ⛪个人主页:子夜的星的主页
  • 💕座右铭:前路未远,步履不停

目录

  • 一、方法的概念
    • 1、什么是方法?
    • 2、方法的定义
    • 3、方法调用的过程
  • 二、方法重载
    • 1、重载的概念
    • 2、方法签名


在日常生活中,如果做饭,我们会用到菜刀。如果砍树,我们会用到斧头。而菜刀、斧头这种工具都是在做好后可以重复使用的。类似于生活中的工具,我们在日常生活中会使用各种各样的工具来完成不同的任务一样,在Java中也我们也可以将需要重复使用的操作写成一个方法,便于后面重复使用。好了,让我们一起揭开方法神秘的面纱。
在这里插入图片描述

一、方法的概念

1、什么是方法?

方法就是一个代码片段。类似于 C 语言中的 “函数”。方法允许我们将代码进行组织和封装,这有助于提高代码的可读性、可重用性和可维护性。方法可以接受参数,执行一系列操作,并返回一个结果。

方法存在的意义:

  • 模块化的组织代码(当代码规模比较复杂的时候)

  • 做到代码被重复使用, 一份代码可以在多个位置使用

  • 让代码更好理解更简单

  • 直接调用现有方法开发, 不必重复造轮子
    在这里插入图片描述

那我们举个简单的例子,我先写一个简单的方法。

    public static void roastInOven(String name){
        System.out.println("烤"+name);
    }

这个方法是一个烤箱方法,他的作用是在你输出的字前面加个烤字。

在这里插入图片描述

可以简单的类比为,我这个方法就是现实中的烤箱,可以把任何东西烤熟。

在这里插入图片描述

2、方法的定义

    public static void roastInOven(String name){
        System.out.println("烤"+name);
    }

我们来拆解一下这个方法。

public:这是访问修饰符,表示该方法是公共的,可以被其他类访问。在Java中,"public"表示该方法对所有类都是可见的。

static:这是一个关键字,表示该方法是一个静态方法。静态方法属于类而不是对象,可以通过类名直接调用,而不需要先创建类的实例。在这里,roastInOven 是一个静态方法。

void:这是方法的返回类型。"void"表示该方法没有返回值。在这个例子中,方法执行后只是打印一条消息,而没有产生具体的返回值。

roastInOven:这是方法的名称。它是一个标识符,用于在程序中引用该方法。

(String name):这是方法的参数列表。在括号中指定了一个参数,这里是一个字符串类型的参数,命名为 name。方法可以接受输入的数据,并在方法体内使用。

System.out.println("烤"+name); 这是方法体,包含这个方法内要执行的语句。

通过这个事例,我们可以总结出一个方法是如何定义的了。

修饰符 返回值类型 方法名称(方法参数列表) {
    方法体,包含实现特定任务的代码
}

根据这个,我们来模仿着写一个方法。该方法的作用是将输入的两个数相加。

图片描述

public static int add(int a, int b) {
    int y = a + b;
    return y;
}

在这里插入图片描述

【注意事项】

  • 修饰符:现阶段直接使用public static 固定搭配

  • 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void

  • 方法名字:采用小驼峰命名

  • 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开

  • 在java当中,方法必须写在类当中

  • 在java当中,方法不能嵌套定义

  • 在java当中,没有方法声明一说(C语言需要进行方法声明)

3、方法调用的过程

方法的调用过程为:调用方法—>传递参数—>找到方法地址—>执行被调方法的方法体—>被调方法结束返回—>回到主调方法往下执行

    public static int add(int x, int y) {
        System.out.println("调用方法中 x = " + x + " y = " + y);
        return x + y;
    }
    public static void main(String[] args) {
        int x = 10;
        int y = 20;
        System.out.println("第一次调用方法之前");
        int sum = add(x, y);
        System.out.println("第一次调用方法之后");
        System.out.println("sum = " + sum);
        System.out.println("第二次调用方法之前");
        sum = add(30, 50);
        System.out.println("第二次调用方法之后");
        System.out.println("sum = " + sum);
    }

在这里插入图片描述
为什么会这样? 因为方法的调用,每次都会在栈上开辟内存!

在这里插入图片描述
在这里插入图片描述
栈帧,也称为帧或活动记录,是在程序执行时存储有关方法调用和本地变量的数据结构。每当调用一个方法时,Java 虚拟机都会为该方法创建一个栈帧,它会被推入 Java 虚拟机的调用栈。

栈帧的创建和销毁遵循方法调用和返回的过程。当一个方法被调用时,一个新的栈帧被创建并推入调用栈的顶部。当方法执行完毕时,栈帧被弹出,控制流回到调用该方法的地方,同时销毁了该栈帧。

二、方法重载

1、重载的概念

方法重载是指在一个类中定义多个同名的方法。在生活中,一个词语如果有多重含义,那么就说该词语被重载了,具体代表什么含义需要结合具体的场景。比如,有个人对你说,你是一个好人。这个时候,好人就有多种意思。一种是你真的是一个好人,第二种意思就是别人在委婉的拒绝你。

图片描述

在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。在Java中,一个类中定义了多个同名的方法,就会构成重载。前段时间写过一个C++里面的函数重载博客,看这个费劲的可以看看:C++ 函数重载:女友说的话到底是什么意思?

    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 static void main(String[] args) {
        System.out.println(add(1, 2)); // 调用add(int, int)
        System.out.println(add(1.5, 2.5)); // 调用add(double, double)
        System.out.println(add(1.5, 2.5, 3.5));// 调用add(double, double, double)
    }

在这里插入图片描述
【注意】

  • 方法名必须相同

  • 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)

  • 与返回值类型是否相同无关

  • 两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的

  • 编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法

2、方法签名

图片描述

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

因为编译器在解析方法重载时主要依赖于方法签名的唯一性。方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

将Java代码经过编译之后,可以使用JDK自带的javap反汇编工具查看:

image-20230628125355312
反汇编查看之后,可以发现,两个方法的名字都叫add,但是在编译器上的名字其实并不一样。

方法全路径名+参数列表+返回值类型,这才是每一个方法真正的名字。

下面解释一下方法签名中的一些特殊符号说明:

特殊字符数据类型
Vvoid
Zboolean
Bbyte
Cchar
Sshort
Iint
Jlong
Ffloat
Ddouble
[数组
L引用类型,以L开头,以;结尾,中间是引用类型的全类名

今天就先聊到这里了,希望看完这篇文章,你能学会方法。我们下次再见!

在这里插入图片描述

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

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

相关文章

elementui修改message消息提示颜色

/* el弹出框样式 */ .el-message {top: 80px !important;border: 0; }.el-message * {color: var(--white) !important;font-weight: 600; }.el-message--success {background: var(--themeBackground); }.el-message--warning {background: var(--gradientBG); }.el-message--…

按键精灵调用大漠插件源码例子

源码名称:按键精灵调用大漠插件例子源码完整备注 源码名称:按键精灵调用大漠插件例子源码完整备注 蓝奏下载:https://wwi.lanzoup.com/iuffr0riiowf 飞书网盘:Docs

国庆作业 day 2

select实现服务器并发 #include<myhead.h> #define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.0.103" //本…

VUE3照本宣科——package.json与vite.config.js

VUE3照本宣科——package.json与vite.config.js VUE3照本宣科系列导航 前言一、package.json1.name2.version3.private4.scripts5.dependencies6.devDependencies 二、vite.config.js1.plugins2.resolve.alias3.base4.mode 三、VUE3照本宣科系列总结 VUE3照本宣科系列导航 1.VU…

ZRTP交叉编译与移植

1 ZRTP源码下载 这里采用的是libzrtp来自于freeswitch&#xff1a;libs/libzrtp。 2 ZRTP交叉编译 zrtp编译比较简单&#xff0c;采用configure进行编译在根目录心中zrtp编译脚本&#xff0c;只需要指定交叉编译工具链和安装地址即可。脚本如下所示&#xff1a; unset CC C…

文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题

五、用go语言&#xff0c;栈插入和删除元素只能在同一端进行&#xff0c;队列的插入操作和删除操作分别在两端进行&#xff0c;与它们不同的&#xff0c;有一种双端队列(deque)&#xff0c;其插入和删除操作都可以在两端进行。写出4个时间均为 O(1)的过程&#xff0c;分别实现在…

Python之字符串分割替换移除

Python之字符串分割替换移除 分割 split(sepNone, maxsplit-1) -> list of strings 从左至右sep 指定分割字符串&#xff0c;缺省的情况下空白字符串作为分隔符maxsplit 指定分割的次数&#xff0c;-1 表示遍历整个字符串立即返回列表 rsplit(sepNone, maxsplit-1) -> …

【熬夜爆肝版】JAVA基础入门专栏——1.JAVA开发入门

JAVA开发入门 1、Java概述1&#xff09;起源2&#xff09;特点3&#xff09;应用领域 2、JDK1&#xff09;定义2&#xff09;作用3&#xff09;组成4&#xff09;JDK版本与兼容性5&#xff09;JDK的安装与配置6&#xff09;JDK的发行版 3、系统环境变量1&#xff09;定义2&…

【Java项目推荐之黑马头条】你的登录鉴权业务是怎么实现的?

前言 在学习Java的路上还是遇到了很多不错的好项目的&#xff0c;今天分享给大家&#xff0c;希望能对大家面试有所帮助&#xff01; 后续会继续推荐其他好的项目&#xff0c;这次推荐的是B站开源的视频黑马头条项目&#xff0c;来吧学会它一起去虐面试官&#xff01;&#x…

【C语言初阶】初识C语言

目录 一、什么是C语言 二、第一个C语言程序 三、数据类型 类型的使用&#xff1a; 四、变量、常量 4.1 定义变量的方法 4.2 变量的命名 4.3 变量的分类 4.4 变量的使用 4.5 变量的作用域和生命周期 4.5.1 作用域 4.5.2 生命周期 4.6 常量 五、字符串转义字符注释 …

【计算机组成 课程笔记】7.2 DRAM和SRAM

课程链接&#xff1a; 计算机组成_北京大学_中国大学MOOC(慕课) 7 - 2 - 702-DRAM和SRAM&#xff08;13-22--&#xff09;_哔哩哔哩_bilibili 从【计算机组成 课程笔记】7.1 存储层次结构概况_Elaine_Bao的博客-CSDN博客中&#xff0c;我们了解到&#xff1a;SRAM比较快&#x…

x64内核实验5-API进0环

x64内核实验5-API进0环 今天开始我们来分析系统api进0环的过程 系统调用3环部分的过程分析 先写一个应用程序然后我们调用一个readprocessmemory的系统api #include <Windows.h> #include <stdio.h>DWORD32 testVal 111;int main() {HANDLE h GetCurrentProc…

DatenLord前沿技术分享 No.36

达坦科技专注于打造新一代开源跨云存储平台DatenLord&#xff0c;通过软硬件深度融合的方式打通云云壁垒&#xff0c;致力于解决多云架构、多数据中心场景下异构存储、数据统一管理需求等问题&#xff0c;以满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。在本周…

ChatGPT已进化到会看图和说话了,上教程

HI&#xff0c;同学们&#xff0c;我是赤辰&#xff0c;本期是第14篇AI工具类教程&#xff0c;文章底部准备了粉丝福利&#xff0c;看完后可领取&#xff01; ChatGPT又又又升级&#xff01;这次是支持语音聊天和图像问答。 这意味着用户现在除了键盘文本输入外&#xff0c;还可…

【JavaEE】多线程进阶(一)饿汉模式和懒汉模式

多线程进阶&#xff08;一&#xff09; 文章目录 多线程进阶&#xff08;一&#xff09;单例模式饿汉模式懒汉模式 本篇主要引入多线程进阶的单例模式&#xff0c;为后面的大冰山做铺垫 代码案例介绍 单例模式 非常经典的设计模式 啥是设计模式 设计模式好比象棋中的 “棋谱”…

三一充填泵:煤矿矸石无害化充填,煤炭绿色高效开采的破局利器

富煤贫油少气是我国的能源禀赋特征&#xff0c;决定了我国以煤炭为主的能源结构&#xff0c;煤炭为国民经济发展提供了重要的基础。煤炭开采过程会对土地、地下水、空气等环境造成较大的污染&#xff0c;但大宗固废煤矸石无害化充填的技术手段可以有效改善这样的情况&#xff0…

LabVIEW使用机器学习分类模型探索基于技能课程的学习

LabVIEW使用机器学习分类模型探索基于技能课程的学习 教育中的学习评估对教育工作者来说是一项繁琐的工作&#xff0c;但评估的好处是显着的。由于其开放性和复杂性&#xff0c;使用传统的评估方法为学生提供及时的支持一直具有挑战性。在Covid-19大流行期间突然转向在线学习&…

总结二:linux面经

文章目录 1、 Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数。2、文件权限怎么修改&#xff1f;3、说说常用的Linux命令&#xff1f;4、说说如何以root权限运行某个程序&#xff1f;5、 说说软链接和硬链接的区别&#xff1f;6、说说静态库和动态…

QT聊天室阶段性记录(完善中:注册功能,数据库存储)

server.h #ifndef SERVERDEMO_H #define SERVERDEMO_H#include <QObject> #include <QTcpServer> #include <QMap> #include <QSqlDatabase> //数据库管理类 #include <QSqlQuery> //执行sql语句的类 #include <QSqlRecord> //数据库…

最全MacBook选购指南 | 看完你就知道怎么买

最全MacBook选购指南 | 看完你就知道怎么买 作为MacBook的老用户大大小小的型号也都用了不少 那这么多台MacBook到底怎么选呢&#x1f4a1; . ☑️M1和Intel的MacBook有什么差别呢&#xff1f; 下半年苹果发布的两款MacBook都是苹果自研的芯片M1。在此之前苹果一直用的都是Inte…