【Java从入门到大牛】方法详解

news2024/9/23 15:30:45

🔥 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:Java从入门到大牛
🌠 首发时间:2023年7月9日
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🌟 一以贯之的努力 不得懈怠的人生

目录

  • 方法简介
  • 方法的其他形式
  • 方法使用时的常见问题
  • 方法的案例
    • 计算1-n的和
    • 判断一个整数的奇偶
  • 方法在计算机中的执行原理
  • Java的参数传递机制
    • 基本类型的参数传递
    • 引用类型的参数传递
    • 案例:比较数组
    • 案例:从数据中查询指定元素的索引
  • 方法重载
  • 补充知识:方法中单独使用 return 关键字

方法简介

什么是方法

方法是一种语法结构,它可以把一段代码封装成一个功能,以便我们重复调用

方法的完整格式

修饰符 返回值类型 方法名(形参列表) {
	方法体代码(需要执行的功能代码)
	return 返回值;
}

示例:写一个方法,功能为对 2 个整数求和并返回

public static int sum(int a, int b) {
	int c = a + b;
	return c;
}

方法如何执行 ?

方法定义之后,必须要调用才可以跑起来,调用格式为 方法名(参数列表);

int rs = sum(10, 20);
System.out.println(rs);

方法定义时的几个注意点

  • 方法的修饰符:暂时都使用 public static 来修饰
  • 方法申明了具体的返回值类型,内部就必须使用 return 来返回对应类型的数据
  • 形参列表可以有多个,甚至可以没有;如果有多个形参,形参之间必须用逗号隔开,且不能给初始化值

使用方法的好处

  • 提高了代码的复用性,提高了开发效率
  • 让程序的逻辑更加清晰

方法的其他形式

方法定义时,需要按照方法解决的实际业务需求,来设计合理的方法形式解决问题

注意事项

  • 如果方法不需要返回数据,则返回值类型必须申明成 void(无返回值申明),此时方法内部不可以再使用 return 返回数据
  • 方法如果不需要接受数据,则不需要定义形参,且调用方法时也不可以再传数据给方法了
  • 没有参数,且没有返回值类型(void)申明的方法,称为无参数、无返回值的方法,依次类推

方法使用时的常见问题

  • 方法在类中的位置无所谓,但一个方法不能定义再另一个方法里面
  • 方法的返回值类型写 void 时,方法内不能使用 return 返回数据,如果方法的返回值类型写了具体类型,方法内部则必须使用 return 返回对应类型的数据
  • return 语句的下面,不能再编写代码,属于无效的代码,因为执行不到这里
  • 方法不调用就不会执行,调用方法时,传给方法的数据,就必须严格匹配方法的参数情况
  • 调用有返回值的方法,有 3 种方式:1、可以定义变量接收结果;2、或者直接输出调用;3、甚至直接调用
  • 调用无返回值的方法,只有 1 种方式:1、只能直接调用

方法的案例

设计方法时,主要关注三个方面:

  1. 方法是否需要接收数据进行处理 ?
  2. 方法是否需要返回数据 ?
  3. 方法要处理的业务是什么 ?

计算1-n的和

需求

求 1-n 的和

分析

  1. 方法需要接收 n 具体的值,因此形参声明为:int n
  2. 方法需要返回 1-n 的求和结果,因此返回值类型声明为 int
  3. 方法内部的业务:求出 1-n 的和并返回

代码示例

public static int cal(int n) {
    int sum = 0;    // 保存求和的结果
    
    // 求和
    for (int i = 1; i <= n; i++) {
        sum += i;
    }
    
    return sum;     // 返回求和结果
}

判断一个整数的奇偶

需求

判断一个整数的奇偶,并把判断的结果输出出来

分析

  1. 方法需要接收一个整数来进行判断,因此形参声明为:int number
  2. 方法内部判断完后直接输出结果即可,无需返回,因此返回值类型声明为 void
  3. 方法内部的业务:通过 if 语句判断 number 是奇数还是偶数,并输出结果

代码示例

public static void judgeNumber(int number) {
    if (number % 2 == 0) {
        System.out.println(number + "是偶数");
    } else {
        System.out.println(number + "是奇数");
    }
}

方法在计算机中的执行原理

方法被调用的时候,是进入到栈内存中运行,而栈的特点是先进后出

在这里插入图片描述

Java的参数传递机制

Java 的参数传递机制都是值传递

  • 所谓值传递:指的是在传输实参给方法的形参的时候,传输的是实参变量中存储的值的副本
  • 实参:在方法内部定义的变量
  • 形参:定义方法时声明的参数列表

基本类型的参数传递

在这里插入图片描述

从上图中可以看出,因为传递过去的只是值的副本,所以在 change 方法内部对 a 的修改并不会影响主方法里 a 的值

引用类型的参数传递

在这里插入图片描述
从上图中可以看出,引用类型的参数传递传输的是存储的地址值,所以在 change 方法内部对数组 arrs 的修改相当于直接对主方法里的数组进行修改

案例:比较数组

需求

如果两个 int 类型的数组,元素个数和对应位置的元素内容都是一样的,则认为这 2 个数组是一模一样的

分析

  1. 该方法需要接收两个 int 类型的数组,因此形参声明为 int[] arr1, int[] arr2
  2. 该方法判断完需要返回:true 或 false,因此返回值类型声明为 boolean 类型
  3. 该方法内部的业务:判断两个数组内容是否一样

代码示例

public class Test {
    public static void main(String[] args) {
        int[] arr1 = {10, 20, 30};
        int[] arr2 = {10, 20, 30};
        if (compareArray(arr1, arr2)) {
            System.out.println("arr1和arr2一样");
        } else {
            System.out.println("arr1和arr2不一样");
        }

        int[] arr3 = {10, 40, 30};
        if (compareArray(arr1, arr3)) {
            System.out.println("arr1和arr3一样");
        } else {
            System.out.println("arr1和arr3不一样");
        }

    }

    // 判断两个数组是否一样
    public static boolean compareArray(int[] arr1, int[] arr2) {
        // 判断两个数组长度是否一致
        if (arr1.length != arr2.length) {
            return false;
        }

        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] != arr2[i]) {   // 有一个元素不一样就返回false
                return false;
            }
        }

        // 程序如果能执行到这里,说明两个数组一样
        return true;
    }
}

运行结果

在这里插入图片描述

案例:从数据中查询指定元素的索引

需求

设计一个方法可以接收数组和要查询的元素值,最终要返回元素在该数组中的索引,如果数组不存在该元素则返回 -1

分析

  1. 该方法需要接收一个数组和一个数值,因此形参声明为 int[] arr, int digit
  2. 该方法需要返回元素值所在的索引值或者 -1,因此返回值类型声明为 int
  3. 该方法内部的业务:遍历数组,逐个与传入元素比对

代码示例

public class Test {
    public static void main(String[] args) {
        int[] arr = {43, 65, 35, 39, 48, 29};
        System.out.println("39的索引为" + queryIndex(arr, 39));
        System.out.println("99的索引为" + queryIndex(arr, 99));
    }

    // 从数组中查询指定元素的索引
    public static int queryIndex(int[] arr, int digit) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == digit) {
                return i;
            }
        }

        return -1;
    }
}

运行结果

在这里插入图片描述

方法重载

什么是方法重载

一个类中,出现多个方法的名称相同,但是它们的形参列表是不同的,那么这些方法就称为方法重载了

方法重载的注意事项

  • 一个类中,只要一些方法的名称相同、形参列表不同,那么它们就是方法重载了,其它的都不管
  • 形参列表不同指的是:形参的个数、类型或顺序不同,不关心形参的名称

方法重载的应用场景

开发中我们经常需要为处理一类业务,提供多种解决方案,此时用方法重载来设计是很专业的

方法重载案例

开发一个武器系统,功能需求如下

  1. 可以默认发射一枚武器
  2. 可以指定地区发射一枚武器
  3. 可以指定地区发射多枚武器

代码示例

public class Test {
    public static void main(String[] args) {
        fire();
        fire("米国");
        fire("岛国", 1000);
    }

    // 默认发射一枚武器
    public static void fire() {
        System.out.println("默认发射一枚武器给米国!");
    }

    // 指定地区发射一枚武器
    public static void fire(String location) {
        System.out.println("给" + location + "发射一枚武器");
    }

    // 指定地区发射多枚武器
    public static void fire(String location, int nums) {
        System.out.println("给" + location + "发射" + nums + "枚武器");
    }
}

运行结果

在这里插入图片描述

补充知识:方法中单独使用 return 关键字

return; 可以用在无返回值的方法中,其作用是:立即跳出并结束当前方法的执行

代码示例

public class Test {
    public static void main(String[] args) {
        divide(10, 0);
    }
    
    // 进行除法运算
    public static void divide(int a, int b) {
        if (b == 0) {
            System.out.println("您的数据有误!!不执行!!");
            return;     // 直接跳出并结束当前divide方法的执行
        }

        int c = a / b;
        System.out.println("除法结果是: " + c);
    }
}

运行结果

在这里插入图片描述

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

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

相关文章

【计算机组成与体系结构Ⅰ】实验7 IP核的使用、D触发器

一、实验目的 1&#xff1a;学会设计用IP核和原理图的方式设计电路&#xff0c;完成涉及1位数据的2选1多路选择器。 2&#xff1a;设计带异步置零和写使能端的D触发器。 二、实验环境 软件&#xff1a;Vivado 2015.4操作系统&#xff1a;Windows 10 三、实验内容 2.2.1 多路…

49天精通Java,第38天,类加载器,双亲委派机制

目录 一、类加载器子系统的作用1、加载2、链接3、初始化 二、验证【虚拟机必须保证一个类的<clinit>()方法在多线程下被同步加锁】的代码实例三、类加载器的分类1、启动类加载器&#xff08;引导类加载器&#xff09;2、扩展类加载器3、应用程序类加载器&#xff08;系统…

字典dict的get和setdefault,以及collections的defaultdict

一&#xff1a;dict的get和setdefault 首先&#xff0c;字典dict的get和setdefault的用法都是xxx(key, value)&#xff0c; 都是在字典中查找指定的键并返回值&#xff0c;当查找的key键在字典中存在时&#xff0c;两者作用相同。 参考&#xff1a;https://blog.csdn.net/any1…

「深度学习之优化算法」(十)烟花算法

1. 烟花算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   烟花算法(Firework Algorithm,FWA)是一种受烟花爆炸产生火星,并继续分裂爆炸这一过程启发而得出的算法。算法的思想简单,但具体实现复杂。算法提出时间并不长,但是已经有了不少的改进研究和较为全…

【动手学习深度学习--逐行代码解析合集】11实战Kaggle比赛:预测房价

【动手学习深度学习】逐行代码解析合集 11实战Kaggle比赛&#xff1a;预测房价 视频链接&#xff1a;动手学习深度学习–实战Kaggle比赛&#xff1a;预测房价 课程主页&#xff1a;https://courses.d2l.ai/zh-v2/ 教材&#xff1a;https://zh-v2.d2l.ai/ 1、下载和缓存数据集 …

【JavaEE初阶】JavaScript(WebAPI)

文章目录 1.WebAPI背景知识1.1什么是WebAPI1.2什么是API 2.DOM基本概念2.1什么是DOM2.2常用的DOMAPI2.2.1.选中页面元素2.2.2操作元素的属性1. 事件概念2.获取/修改元素内容3. 获取/修改元素属性4.获取/修改表单元素属性5.获取修改样式属性 2.2.3.操作页面节点1.新增节点2.删除…

关联数组不是线性表

百度百科给的关联数组的解释是&#xff1a; “关联数组”是一种具有特殊索引方式的数组。不仅可以通过整数来索引它&#xff0c;还可以使用字符串或者其他类型的值&#xff08;除了NULL&#xff09;来索引它。 关联数组类似于哈希表&#xff0c;有键-索引&#xff0c;它包含标量…

nunittest如何生成测试报告?我来告诉你

目录 HTMLTestRunner 小试牛刀 1、在unittest中编写测试用例 2、添加报告路径已经报告内容 3、批量执行用例&#xff0c;导入测试报告内容中 4、当然是赶快执行查看报告内容啊 4、添加用例注释&#xff0c;增加报告完整性 总结&#xff1a; 我们做测试的人员们都知道测…

【mysql】—— 数据库基础

序言&#xff1a; 在上期&#xff0c;我们已经安装好了【mysql】。在本期&#xff0c;我将给大家介绍关于数据库的基本知识。 目录 &#xff08;一&#xff09;登陆选项 &#xff08;二&#xff09;基本介绍 1、什么是数据库 2、主流数据库 3、见一见数据库 4、服务器管…

使用matplotlib画图时,建立双坐标轴

在进行数据的可视化分析时&#xff0c;可能我们分析的两个指标&#xff0c;他们的取值区间相差很大&#xff0c;如果采用一个y轴&#xff0c;就不利于我们观察另一个指标。所以&#xff0c;记录一下我在项目的处理过程中采用的方法&#xff1a; 首先观察一下&#xff0c;我用到…

MAYA粒子碰撞颜色collisionU,collisionV

if (nParticleShape1.collisionU >0) { float $UnParticleShape1.collisionU; float $VnParticleShape1.collisionV; vector $colRGB colorAtPoint -o RGB -u $U -v $V ramp2; nParticleShape1.rgbPP $colRGB; } 获取 UV 向量处的颜色 vector $colRGB colorAtPoin…

【C51 介绍发光二极管LED】

51单片机项目基础篇 前篇&#xff1a;介绍发光二极管LED1、认识发光二极管LED1.1、二极管1.2、二极管的特性 2、LED简介3、结束语 前篇&#xff1a;介绍发光二极管LED 前言&#xff1a; (1).我们已经认识了 51 单片机芯片和 51 单片机最小系统。 (2).现在进入一些基础的实验阶…

23.07.09

完善对话框功能 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);// this->setWindowOpacity(0); } Widget::~Widget() {delete ui; } //字体对应的槽 voi…

常见的页面标签

一、基本标签 <p>段落标签</p> 换行且有空行 hn(1-6) 标题标签 <h1>一级标题</h1> <h2>二级标题</h2> <h3>三级标题</h3> ..... <br> <br /> <br/> 换…

3.8.使用cuda核函数加速yolov5后处理

目录 前言1. Yolov5后处理2. 后处理案例2.1 cpu_decode2.2 gpu_decode 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习精简…

Zabbix自动报表功能

一、简介 从zabbix 5.4体验版本发布时提供了很多新特性&#xff0c;当然现在最新的Zabbix6.0 LTS版本的定时导出PDF报表功能相对稳定&#xff0c;但如果需要满足日常运维报表需求还是有一段比较长的路要走。总而言之相比以前版本此功能可谓是一大突破。可按照Dashboard维度&am…

计网之体系结构(一)

计网之体系结构&#xff08;一&#xff09; 计算机网络概述计算机网络的概念计算机网络的功能计算机网络的发展计算机网络发展第一阶段计算机网络发展第二阶段&#xff08;三级结构&#xff09;计算机网络发展第三阶段&#xff08;多层次ISP结构&#xff09; 概念&#xff0c;功…

Redis常用面试题

Redis为什么执行这么快&#xff1f; 1.基于内存存储实现。 我们都知道内存读写比在磁盘快很多的&#xff0c;Redis基于内存储存实现的数据。相对于数据库存在磁盘的MySql数据库&#xff0c;剩余磁盘I/O的消耗 2.redis是单线程模型的&#xff0c;而单线程避免了CPU不必要的上…

Python 导入引用其他文件的函数(不断更新)

文章目录 构造初始化文件结构&#xff0c;以此为例。【1】导入同目录且同级下其他文件的函数&#xff08;c.py文件导入d.py文件的函数&#xff09;&#xff08;1&#xff09;只引入d.py文件&#xff08;2&#xff09;直接引入函数&#xff08;3&#xff09;引入全部函数 【2】导…