6.1Java方法

1、方法定义: 

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

方法的完整格式:

修饰符  返回类型  方法名(形参列表){

        方法体代码(需要执行的功能代码)

        return  返回值;

}

package com.define;public class MethodDemo1 {public static void main(String[] args) {//掌握定义方法的完整格式,搞清楚使用方法的好处//需求:加入很多程序员都要进行两个整数求和的操作//1、李工int rs=sum(10,20);System.out.println("和是:" + rs);//2、张工int rs2=sum(13,24);System.out.println("和是:" + rs2);}public static int sum(int a,int b){int c=a+b;return c;}//public static是方法的修饰符
}

结果:

具体运行情况与C语言的自定义函数相同5.8 5.9_C语言_函数1-CSDN博客

方法的调用流程  --Debug

 说明:

  • 方法的修饰符:目前暂时都使用public static 修饰
  • 方法声明了具体的返回值类型,内部必须使用return返回对应类型的数据。
  • 形参列表可以有多个,甚至可以没有,但如果有多个形参,多个形参必须用“,”隔开,且不能给初始化值 

使用方法的好处:

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

2、方法的其他形式: 

方法的其他形式

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

1、方法是否需要接收数据处理

需要数据处理,就要定义一些形参列表,来接收数据;如果这个方法不需要接收数据来处理,这个方法就不需要设计形参列表

2、方法是否需要返回数据

注意事项:

  • 如果方法不需要返回数据,返回值类型必须申明成void(无返回值申明),此时方法内部不可以使用return返回数据

3、方法使用时的常见问题:

 4、方法的案例:

1、计算1-n的和

分析:

1、需要接收数据n的值,因此形参声明为int n

2、需要返回1-n的求和结果,因此返回值类型声明为int

3、方法内部业务:完成求1-n的和并返回

package com.define;public class MethodTest1 {public static void main(String[] args) {int rs=add(5);System.out.println("1-5的和是:" + rs);}public static int add(int n){int sum=0;for(int i=1;i<=n;i++){sum+=i;}return sum;}}

2、判断一个整数是奇数还是偶数

需求:

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

分析:

  • 1、需要接收一个整数来判断,形参声明为int number
  • 2、不需要返回数据,方法内部判断完后直接输出结果即可,无需返回,返回值类型声明为:void
  • 3、通过if判断number是奇数还是偶数,并输出结果。 
package com.define;public class MethodTest2 {public static void main(String[] args) {judg(11);}public static void judg(int number){if(number%2==0){System.out.println(number + "是偶数");}else{System.out.println(number + "是奇数");}}
}

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

  • 方法被调用的时候,是进入到栈内存中运行的  栈:先进后出,用完的回清理掉

5、Java的参数传递机制

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

值传递:指的是在传输实参给方法的形参的时候,传输的是实参变量中存储的值的副本

实参:在方法内部定义的变量

形参:定义方法是“(...)”中所声明的参数

1、基本类型的参数传递

2、引用类型的参数传递

package com.parameter;public class MethodDemo2 {//引用类型的参数传递public static void main(String[] args) {int[] arrs=new int[]{10,20,30};change(arrs);//这个数组变量arrs就是一个引用类型的参数,// 这个数组变量里面存储的就是数组的地址System.out.println("main:" + arrs[1]);}public static void change(int[] arrs)//arrs作为形参来接这个数组的地址{System.out.println("方法内1:" + arrs[1]);arrs[1]=234;System.out.println("方法内2:" + arrs[1]);}
}

 

基本类型和引用类型的参数在传递时:

  • 都是值传递
  • 基本类型的参数传输存储的数据值
  • 引用类型的参数传输存储的地址值 

6、引用类型参数传递的相关案例 

案例1

打印int类型的数组内容

需求:

  • 输出一个int类型的数组内容,要求输出格式为:[11,22,33,44,55]。

分析:

1、方法需要接收一个int类型的数组,形参声明为int[] arr

2、方法内部直接输出数组内容即可,无需返回,返回类型为void

3、方法内部:遍历数组,并输出相应的内容

package com.parameter;public class MethodTest3 {public static void main(String[] args) {int[] arr = new int[]{11,22,33,44,55};printArray(arr);int[] arr2 =null;printArray(arr2);int[] arr3={};printArray(arr3);}public static void printArray(int[] arr){//要考虑接收到的参数不是空地址if(arr==null){//说明这个arr指向的是空地址System.out.println(arr);//nullreturn;//跳出当前方法}System.out.print("[");for (int i = 0; i < arr.length; i++) {/*if(i==arr.length-1){System.out.print(arr[i]);}else{System.out.print(arr[i] + ",");}*/System.out.print(i==arr.length-1 ? arr[i] : arr[i] + "," );}System.out.println("]");}
}

 结果:

案例2

比较两个int类型的数组是否一样,返回true或false

需求:

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

分析:

1、方法需要接收两个int类型的数组,形参声明为int[] arr1,int[] arr2

2、方法判断完后需要返回true或false,返回值类型声明为boolean类型

3、方法内部:判断两个数组内容是否一样

package com.parameter;public class MethodTest4 {public static void main(String[] args) {/*int[] arr1=null;int[] arr2=null;System.out.println(equals(arr1, arr2));//true*//*int[] arr1=null;int[] arr2= {10,20,30};System.out.println(equals(arr1, arr2));//false*//*int[] arr1= {10,20,30,40};int[] arr2= {10,20,30};System.out.println(equals(arr1, arr2));//false*//*int[] arr1= {10,21,30};int[] arr2= {10,20,30};System.out.println(equals(arr1, arr2));//false*/int[] arr1= {10,20,30};int[] arr2= {10,20,30};System.out.println(equals(arr1, arr2));//true}public static boolean equals(int[] arr1,int[] arr2){//1、判断arr1和arr2是否都是nullif(arr1==null&&arr2==null){return true;}//2、arr1或者arr2是nullif(arr1==null || arr2==null){return false;}//3、arr1和arr2都不为null,判断两个数组的长度是否一样,如果长度不一样,直接返回falseif(arr1.length!=arr2.length){return false;//不相等}//4、两个数组长度一样,接着比较他们的内容是否一样//arr1  =[10,20,30]//arr2  =[10,20,30]for (int i = 0; i < arr1.length; i++) {//判断当前位置两个位置的元素是否不一样,不一样直接返回falseif(arr1[i] != arr2[i]){return false;//不相等}}return true;//两个数组是一样的}
}

 7、方法重载

方法重载:

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

 

为什么不会出现错误,因为在调用他们的时候是不会出现冲突的。

方法重载的注意事项

  • 一个类中,只要一些方法的名称相同、形参列表不同,那么它们就是方法重载了,其他的都不管(如:修饰符、返回值类型是否一样都无所谓)
  • 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。 

 

 

方法重载的应用场景:

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

案例导学

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

  • 1、可以默认发一枚武器
  • 2、可以指定地区发射一枚武器
  • 3、可以指定地区发射多枚武器
package com.overload;public class MethodTest2 {public static void main(String[] args) {fire();fire("B国");fire("C国",999);}public static void fire(){System.out.println("默认给A国发射了一枚武器");}public static void fire(String country){System.out.println("发射了一枚武器给" + country);}public static void fire(String country,int number){System.out.println("发射了" + number + "枚武器给" + country);}
}

 结果:

优化:

package com.overload;public class MethodTest2 {public static void main(String[] args) {fire();fire("B国");fire("C国",999);}public static void fire(){fire("A国");}public static void fire(String country){fire(country,1);}public static void fire(String country,int number){System.out.println("发射了" + number + "枚武器给" + country);}
}

结果: 

8、补充知识

在方法中单独使用return关键字

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

 

return、break、continue

  • retrun:跳出并立即结束所在方法的执行
  • break:跳出并结束当前所在循环的执行
  • continue:结束当前所在循环的当次执行,进入下一次执行 

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

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

相关文章

面向对象编程 (OOP):深入理解继承、多态和抽象

1. 简介 面向对象编程 (OOP) 是一种强大的编程范式&#xff0c;它通过将程序组织成对象的集合来简化软件设计和开发。与传统的程序设计方法相比&#xff0c;OOP 提供了一种更自然、更易于理解和维护的方式来构建复杂的软件系统。OOP 的核心概念包括&#xff1a;对象、类、继承、…

Java进阶学习笔记31——日期时间

Date&#xff1a; 代表的是日期和时间。 分配Date对象并初始化它以表示自标准基准时间&#xff08;称为纪元&#xff09;以来的指定毫秒数&#xff0c;即1970年1月1日00:00:00。 有参构造器。 package cn.ensource.d3_time;import java.util.Date;public class Test1Date {pu…

Java—异常处理

异常的结构图 异常知识点 异常分类&#xff1a; 按照在程序编译阶段是否被检查&#xff0c;异常分为编译时异常&#xff08;Checked Exception&#xff09;和运行时异常&#xff08;Unchecked Exception&#xff09;。编译时异常是指必须进行显式处理的异常&#xff0c;例如IOE…

【Linux】写一个日志类

文章目录 1. 源代码2. 函数功能概览3. 代码详细解释3.1 头文件和宏定义3.2 Log类定义3.3 打印日志的方法3.4 操作符重载和析构函数3.5 可变参数函数的原理 4. 测试用例 1. 源代码 下面代码定义了一个 Log 类&#xff0c;用于记录日志信息。这个类支持将日志信息输出到屏幕、单…

Java扩展机制:SPI与Spring.factories详解

一、SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不…

戴尔科技:一盆冷水浇醒了AIPC

这年头&#xff0c;只要沾上英伟达的公司&#xff0c;不论美股还是大A,都跟着鸡犬升天几轮过&#xff0c;但昨晚英伟达蒸发1064亿美元&#xff0c; 跟着遭罪的也不少&#xff0c;有没有一夜惊魂梦醒的感觉&#xff1f; 今天我们来说说——戴尔科技。 昨晚戴尔科技大跌5.18%&a…

5G无线标准演进综述及新技术引入

摘 要 随着经济和社会的发展&#xff0c;5G业务越来越丰富多彩&#xff0c;1080P高清视频、裸眼3D、网联汽车、云手机等新业务、新终端对网络的要求也越来越高&#xff1b;另一方面&#xff0c;5G标准持续演进&#xff0c;在MIMO、载波聚合、移动性管理、uRLLC、切片、定位等方…

模仿库实现priority_queue

1 priority_queue 1.1 概念 优先级队列&#xff0c;一种大/小堆(默认为大堆) 1.2 大堆和小堆 一种完全二叉树&#xff0c;大堆根节点一定比子字节大 小堆根节点一定比子字节小 向下调整 从根节点开始比较与子节点的大小不断向下 向上调整 找到最后一个非叶子节点&#xf…

mac多媒体影音库:Emby for Mac 中文版

Emby软件是一款功能强大的媒体服务器软件&#xff0c;旨在为用户提供丰富的多媒体体验。以下是关于Emby软件的详细介绍&#xff1a; 下载地址&#xff1a;https://www.macz.com/mac/7964.html?idOTI2NjQ5Jl8mMjcuMTg2LjE1LjE4Mg%3D%3D 主要功能 媒体管理&#xff1a;Emby允许用…

代码随想录-Day25

216.组合总和III 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输…

Python OCR 图片转文字进阶:读光OCR之行检测模型+行识别模型

Python OCR 图片转文字进阶&#xff1a;读光OCR之行检测模型行识别模型 介绍阿里云文字识别OCR&#xff08;读光OCR&#xff09;前置条件模型1&#xff1a;行检测模型模型1&#xff1a;行识别模型 代码&#xff1a;main.py 介绍 什么是OCR&#xff1f; OCR是“Optical Charac…

德人合科技——@天锐绿盾 | -文档透明加密系统

天锐绿盾文档透明加密系统是一种先进的数据安全解决方案&#xff0c;旨在保护企业和组织的敏感信息&#xff0c;防止未经授权的访问和泄漏。 PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是该系统的一些关键特点和功…

[C++11/14新特性] tuple元组介绍

C11 标准新引入了一种类模板&#xff0c;命名为 tuple&#xff08;中文可直译为元组&#xff09;。tuple 最大的特点是&#xff1a;实例化的对象可以存储任意数量、任意类型的数据。tuple 的应用场景很广泛&#xff0c;例如当需要存储多个不同类型的元素时&#xff0c;可以使用…

3D目标检测入门:探索OpenPCDet框架

前言 在自动驾驶和机器人视觉这两个飞速发展的领域中&#xff0c;3D目标检测技术扮演着核心角色。随着深度学习技术的突破性进展&#xff0c;3D目标检测算法的研究和应用正日益深入。OpenPCDet&#xff0c;这个由香港中文大学OpenMMLab实验室精心打造的开源工具箱&#xff0c;…

【用Python画画】六一儿童节画爱心

本文收录于 《Python编程入门》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程基础知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、代码示例三、知识点梳理四、总结 一、前言 本文介绍如何使用Python的海龟画图工具turtle&#xf…

堆排序的实现

在上一篇博客中&#xff0c;介绍了堆的实现&#xff0c;现在来介绍一下堆排序。 一.打印有序&#xff1a; 现在先给一个无序的数组&#xff0c;现在我们利用我们实现的堆的功能先完成一下打印排序&#xff1a; 在for循环里是一个建堆的过程&#xff0c;每来一个数据就放入堆中…

linux进程的加载和启动过程分析

我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,那么当我们在终端敲下指令$ ./a.out argv1 argv2 后,操作系统是怎么将我们的可执行文件加载并运行的呢? 首先知道,计算机的操作系统的启动程序是写死在硬件上的,每次计算机上电时,都将自动加载启动程序,之后…

python第五次作业

1.请实现一个装饰器&#xff0c;每次调用函数时&#xff0c;将函数名字以及调用此函数的时间点写入文件中 # 导入datetime模块&#xff0c;用于获取当前时间并格式化输出 import datetime# 定义一个装饰器工厂函数log_funcName_time&#xff0c;它接受一个参数time def log_fu…

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中应用

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中的应用 由北京海特伟业科技有限公司任洪卓发布于2024年6月1日 红外语音听力广播&#xff08;即红外听力教学考试系统&#xff09;在英语四六级听力考试的应用正日益凸显出其重要性和优越性。在当前的高等教育…

xcode删除依赖包package,删除不必要的依赖项

点击项目&#xff0c;然后点击PROJECT项里面的Package DepenDependencies&#xff1a; 选中一个依赖项&#xff0c;然后点击减号&#xff0c;就可以把依赖项删除掉了&#xff0c;左侧项目下面的Package已经没有了这个依赖项 TARGET下面的package也要删除&#xff1a;在这里删除…