Java基础之方法部分

2023-11-10

Java中的方法好似c/c++/python中的函数:

方法是一种语法结构,它可以把一段代码封装成一个特定功能,减少代码重复,提高开发效率。使得代码逻辑更加清晰、更牛逼!

方法格式:

标志符(public static) 方法返回类型 方法名(形式参数【注意这种格式 int a】)

实现方法的代码

...

}

如写一个两数求和函数:

使用方法的好处?

  • 提高了代码的复用性
  • 让程序的逻辑更加清晰 

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

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

return返回值;

}

方法的调用格式:

方法名(实参列表);

方法的修饰符:暂时使用public static修饰

方法申明了具体的返回值类型,内部必须使用return 返回需要返回的数据 对应的返回值类型

形参列表可以是多个,亦可以没有 形参之间使用,隔开 不能像Python一样关键字传参 仅位置参数

例如:无返回值无参数类型的方法

 如果方法不需要返回值,不需要接收参数,怎么办?

方法不需要返回结果则申明返回类型为void;方法不需要传参数则直接不写形参()

方法没有设置返回值 方法体里面是不能写return语句的!

方法常见的问题:

  • 方法的编写顺序无所谓
  • 方法与方法之间是平级关,不能使用嵌套定义。
  • 方法的返回值为void时,方法体内不能使用return语句不然会报错;如果写了返回值类型 return的数据类型必须要和起初定义的返回值类型一致。
  • return语句执行后直接退出这个函数,其下面的语句不会执行,属于无效代码。
  • 方法不调用,定义函数里的代码就不会执行,调用时必须复合规则 如:实参个数与形参个数对等
  • 有返回值的方法调用时可以定义变量接收结果,或者直接输出调用,甚至直接调用无返回值只能调用 不需要使用变量接收。

方法定义的技巧:

复习一边地定义方法的格式:

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

方法体语句

返回值

}

例如:

public static int add(int a,int b){

return a+b;

}

返回值类型+方法名+形参列表

修饰符:public static(暂时固定)

方法名:见名知义 有意义 驼峰模式 英文模式 复合标识符命名规则

方法体代码:具体功能具体实现

真正需要关注的两点:

  • 返回值类型
  • 参数问题

练习:输入一个n,计算出1~n的和

练习:判断一个数是基数还是偶数;返回某数是否(奇偶)

想想能不能简化代码呢?之前学了一个三元运算符  可以替代if else(双分支语句)

数组求最值的方法:类似于选择排序

定义一个数组 假设第一个数是最大的 然后和他后面的数进行比较,每次交换得到最大的数。

也可直接赋值,更新:

 

 利用选择排序降序得到最大值:

回忆一下之前说过的几个区(内存被分为五个区:栈、堆、方法区、接口...):

栈:里面一般放局部变量 函数 main函数(主体函数)  执行特点:先进后出

堆:new 对象 例如 int[] arr={1,2,3};   {1,2,3}就先存在堆区         数组地址在栈区 通过指向方法。

方法的内存运行机制:

简单口述一下执行流程:

栈区有:main、study 、eat、Sleep

首先执行main函数 然后直接来到study()函数内 又先开始执行eat() 执行完成后eat()退出栈区;

继续执行study()里的打印学习 然后执行Sleep() 执行完毕后退出栈区==study退出栈区==main函数也退出栈区,代码结束完毕。

So:方法的运行区在哪里?

栈内存里。

Java的参数传递机制:值传递!!!

  • 在传输实参给方法的时候,并不是传输的变量本身,而是传输实参变量中存储的值,这就是值传递。
  • 实参:调用函数是传入的值
  • 形参: 定义函数是的值 参数

针对不同的数据类型(基本数据类型/引用数据类型),若改变形参的值,有不同的结果:

例如:

 

 又如数组:

小结:同样是值传递,改变值,基本类型(形参的改变不会作用于实参的改变,方法里的形参执行完毕 就会销毁 整个方法也会销毁 内存会释放空间)不会变化;引用类型会发生值的变化。

java不像c语言一样,有指针的知识(指针==地址) c语言分为传值调用 传址调用。java是类似的,传入基本数据类型是传的值 引用数据类型是传的地址。

练习:打印任何数据的内容:

打印格式:[1,2,3]

 

补充一个二分查找:

申明:二分查找针对顺序数组进行元素查找(如果是无序的数组,也可以通过排序方法先排好,在进行二分查找); 二分查找的效率很高,每查找一次减少一半的规模 时间复杂度:O(logn)

 

 

练习:比较两个数组是否一样

如果说比较内容的话我们就可以利用排序来比较,这里要比较完全相同就需要遍历一个一个判断。

 

 有时候我们编程的时候可以考虑逆向思维,更加简单,思路更加灵活。

方法重载:
特点:

实现功能类似,方法名一样,参数列表不同,方法重载可以提高代码的复用性。

同一个类里,多个方法相同,形参列表不同,区分大小写。参数的类型数量顺序,与参数名无关。

方法重载的好处:

对于相同的功能业务场景,可读性好,方同提法名相似是统一类型的功能,通过不同实现的功能差异化的选择,这是一种专业的代码设计。

简化方法:

return关键字的独用:

直接结束方法运行,后面的代码不会再执行到了,有一种拦截的作用。该方法可以单独使用在任何方法

使用格式:

return;

例如:执行除法(要求 除数不能为0)

 案例训练:

结合之前学习的所有java基础知识,完成一个个案例。

涉及到的Java知识点:

  • 变量、数组
  • 运算符
  • 程序流程控制if else  if else  switch 死循环 循环嵌套
  •  跳出关键字:break、continue、return
  • 方法

编程思维:

利用Java技术解决实际问题,代码就是解决问题的逻辑。

提高编程思维和编程能力:

写代码之前将问题细分,画出流程图;结合大量练习,勤于思考,熟能生巧。

前期:模仿 后期:内化+创新

不积跬步,无以至千里;不积小流,无以成江海。     学习在于重复,积累,坚持!!!

案例一:买飞机票:

  • 机票价格按照淡季旺季、头等舱和经济舱、输入机票原价、月份、类型
  • 按照如下规则计算机票的最终售价:旺季(5~10)经济舱:八五折  头等舱:九折  淡季(其他月份) 经济舱:六五折  头等舱:七折
  • 键盘录入+流程控制语句的选择+描述规则+反回对应类型的数据

 

 

 

代码测试:

注意:

遇到判断区间匹配使用if语句;遇到值匹配使用switch语句。 

案例二:找素数:

  • 基于一道面试题,判断1001~200之间的素数 满足打印
  • 素数:只能被1和本身整除的数
  • 使用试除法
     

 案例三:开发验证码

  • 定义方法实现随机生成5位验证码,每位可能是英文大写、英文小写、数字
  • 定义方法 返回验证码(String)方法参数是验证码的位数 
  • 方法内部使用for循环 随机生成验证码对应的类型(标志)再具体随机验证码
  • 把生成的验证码结合起来即可

 

 

 测试:

 注意:确定密码的类型 知道类型的个数 利用随机数(利用ASCII码)强转类型 随机生成验证码。

"+"运算 能算就算 不能算就在一起            如:1+'a'==98  (int char) 最终结果为最大存储字节。

案例四:数组元组赋值:

  • 例如: int[] arr={..};   int[] arr2=arr;  这种不算数组元素赋值  而是指向一个相同的数组对象(共用数组数据)
  • 需求:把一个数组的所有元素赋值到另一个数里
  • 遍历 赋值 输出两个数组的值验证

 

 案例五:评委打分

需求:

  • 打分区间【0~100】6个评委 每个人打分  选手最终的分数:去掉最高分,最低分 计算平均分
  • 利用动太初始化数组
  • 遍历 获得最高分 最低分 平均分
  • 业务处理 返回结果

 

 

 注意:类型的重要性 不管是变量 方法 数组 他们是一个体系的 需要什么类型的数据 ?

案例六:数据加密

  • 定义一个数组 输入数据 进行加密(按一定的规则 例如:先+5 然后%10最后逆置数组)
  • 打印加密的和解密的数据
  • 加密,解密是双向的。

 

 

 案例七:双色球开发系统

需求:随机生成一组中奖号码(六个红球、一个蓝球)

红球号码在1~33 中选择 不能重复  、蓝球号码在1~16中选择 依照对应球的个数进行发奖;

假设规则:

红球命中个数+蓝球命中个数 来确立。      

5元(1+1)

10元(2+1/3+1/4+0)

200元(4+1/5+0)

3000元(5+1)

最高500w(6+0)

最高1000w(6+1)

主要有三个部分:首先、随机生成7个中奖号码 然后用户输入猜测这7个号码 最后系统判定。

 

 

 

 

 

主要要点:

录入数据到数组后,如何判断之前数据是否重复?利用无限循环+标志位巧妙解决;

统计红蓝球个数时的清晰头脑,什么时候记录,什么时候展示数据。

 Java基础结束后,我下一篇文章将会介绍Java面向对象的基础知识。

谢谢大家的阅读,我会不断更新写出更好地文章!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础之方法部分 的相关文章

  • 使用 java 删除 XML 根的子级

    这是我的 xml 文件
  • Hashset - 创建 Set 后使对象相同

    如果我们在 HashSet 中添加两个不同的对象 可变的 然后通过调用 setter 更改对象的值 使它们相同 则大小仍然是 hashSet 的 2 我无法理解其原因 public static void main String args
  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • 如何从 Java 访问 Windows 设备管理器中的信息?

    我有一个串行 USB 设备 并且其中多个设备可以连接到计算机 我需要查询和检索设备连接到的 COM 端口列表 在 Windows 设备管理器中 您可以获得当前连接的设备的 COM 端口 友好名称 该列表是动态的 从注册表中读取不工作 htt
  • JAXB 继承冲突 - 重新注释子类

    目前我的项目中有这样的环境 public abstract class Foo private List
  • Java Junit 测试 HTTP POST 请求

    我需要测试以下方法而不改变方法本身 该方法向服务器发出 POST 方法 但我需要制作一个独立于服务器的测试用例 在将其重定向到本地文件之前 我测试了类似的方法 但为此我将协议指定为文件 主机名指定为 localhost 端口指定为 1 我的
  • 未注入带有 JPA2 的 Apache Ignite 2.7 IgniteRepository

    使用在 Web 上建立的 guildes 我使用 Spring Data JPA 2 应用程序制作了简单的 Spring Boot 2 仅在 2 7 版本中才向 Apache Ignite 添加了 Spring Boot JPA 2 支持
  • 对对象集合进行排序[重复]

    这个问题在这里已经有答案了 如果我有一个简单的字符串列表 List
  • FileObserver 不适用于 Android 6.0 Marshmallow (API 23) 中的外部存储

    我有一个应用程序可以观察外部存储上的公共目录FileObserver 它运行良好Lollipop设备 我想添加对Marshmallow 所以我用它设置了一台 Nexus 9 平板电脑 在 Marshmallow 设备上 它失败 在 Loll
  • for循环中更新JLabel的问题

    我的程序的想法是从之前在其他 JFrame 中保存的列表中选择一个名称 我想在标签中一个接一个地打印所有名称 它们之间有很小的延迟 然后停在其中一个名称上 问题是lbl setText String 如果有多个则不起作用setText co
  • 是否可以手动检查 LocateRegistry 是否存在?

    I 已经发现 https stackoverflow com a 8338852 897090一种安全的方式获得LocateRegistry 即使注册表尚不存在 Registry registry null try registry Loc
  • 在Java中如何将字节数组转换为十六进制?

    我有一个字节数组 我希望该数组的每个字节字符串转换为其相应的十六进制值 Java中有没有将字节数组转换为十六进制的函数 byte bytes 1 0 1 2 3 StringBuilder sb new StringBuilder for
  • 如何在 spring-data 中强制使用 CrudRepository 进行预加载?

    我有一个实体 其中包含List就是这样lazy默认加载 interface MyEntityRepository extends CrudRepository
  • JPA Web 应用程序管理策略

    我们目前正在开发一个 J2EE Web 应用程序 使用 JPA 作为我们的数据访问层 我们目前正在研究几种不同的策略来在我们的应用程序中利用缓存 Create an EntityManager per request 在请求范围内获取缓存
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • 获取 Future 对象的进度的能力

    参考 java util concurrent 包和 Future 接口 我注意到 除非我弄错了 只有 SwingWorker 实现类才能启动冗长的任务并能够查询进度 这就引出了以下问题 有没有办法在非 GUI 非 Swing 应用程序 映
  • 如何使用eclipse调试JSP tomcat服务?

    我想使用 Eclipse IDE 调试器来调试单独运行的 JSP Struts Tomcat Hibernate 应用程序堆栈 如何设置 java JVM 和 eclipse 以便设置断点 监视变量值并查看当前正在执行的代码 我刚刚用谷歌搜
  • 在java中执行匿名pl/sql块并获取结果集

    我想执行匿名 PL SQL 并需要获取结果集对象 我得到了可以通过在 PL SQL 块内使用游标来完成的代码 但 PL SQL 块本身将以文本形式来自数据库 所以我无法编辑该 PL SQL 块 并且它只会返回两个值 其列名始终相同 它将返回
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • 如何在J2ME中获取数字的幂[重复]

    这个问题在这里已经有答案了 可能的重复 J2ME power double double 数学函数实现 https stackoverflow com questions 2076913 j2me powerdouble double ma

随机推荐

  • ERROR: Could not find a version that satisfies the requirement setuptools_scm (from versions: none)

    一 项目场景 在使用百度飞桨导入paddlehub包时 一直出现没有 paddlehub 包的错误 换了好几个镜像源都不行 出现以下错误 WARNING The repository located at pypi douban com i
  • vue 实现Tabs 组件自定义删除+拖拽排序功能

    前言 目前市面上有很多实现拖拽排序功能的插件和方法 本节不过多累述 只讲一种 vue的v dragging内置组件 效果图 主图 拖拽中的图 1 安装 npm install awe dnd save 2 在 main js 文件中引入 i
  • 《算法图解》高清PDF版

    算法图解 高清PDF版 像小说一样好看容易理解的算法书籍 适合算法和竞赛入门者学习 书中的示例代码是python width 738 height 523 class preview iframe scrolling no src http
  • Flutter GetX使用详细解读

    FlutterGetX 是一个基于 Flutter 框架的状态管理和依赖注入库 它与其他状态管理库相比 具有以下优势 简单易用 FlutterGetX 采用简单明了的 API 设计 易于学习和使用 高性能 FlutterGetX 的状态更新
  • Android 学习之环境变量配置以及无法安装 intel HAXM问题的解决

    前提 已完成Java运行环境的全部配置 1 Android 开发工具Android Studio的下载和安装 自行百度 2 下载Android SDK以及设置环境变量 2 1 Android SDK 开发工具中可搜索下载 2 2环境变量配置
  • 02-像元大小

    https blog csdn net peckerzeng article details 78319935 在解释像元大小 Cell size of raster data 的概念的时候 我们有必要先引入另外一个名词叫做 像素 像素顾名
  • python最小二乘法拟合模型的loocc误差_最小二乘法拟合+3sigema去除误差大的点

    for i 1 96 for j 1 96 xdata 4 8 12 16 20 24 28 32 if ratio1 i j ratio2 i j ratio3 i j ratio4 i j ratio5 i j ratio6 i j r
  • C++模板template用法

    引言 模板 Template 指C 程序设计设计语言中采用类型作为参数的程序设计 支持通用程序设计 C 的标准库提供许多有用的函数大多结合了模板的观念 如STL以及IO Stream 1 模板 1 1 什么是函数模板 函数模板定义一族函数
  • Linux·内核的 4 大 IO 调度算法

    Linux 内核包含4个IO调度器 分别是 Noop IO scheduler Anticipatory IO scheduler Deadline IO scheduler 与 CFQ IO scheduler anticipatory
  • 资源编排

    ROSTemplateFormatVersion 2015 09 01 Parameters InstanceName Description 镜像名称 Type String Default localhost Resources Web
  • vben admin 之语言配置、使用、切换

    思路 语言导入逻辑 初始化 在 src locales setupI18n 内的根语言文件中 import lang locale ts import type App from vue import type I18n I18nOptio
  • 共模电感的工作原理

    共模电感的工作原理 在电路设计时 经常会听到利用共模电感来抑制电源噪声 但对共模电感的工作原理却不是很理解 在看了几篇文章后才有了比较清晰的认识 特此总结起来以增强认知和理解 共模电感 指在某种磁性材料的磁环上绕上同向的一对线圈 差模电流
  • 设计分享

    目录 具体实现功能 设计介绍 51单片简介 设计思路 设计内容 仿真图 protues8 7 程序 KeilC51 具体实现功能 利用滑动变阻器实现对直流电机转速的控制 仿真实现 汇编语言编写 设计介绍 51单片简介 51单片是一种低功耗
  • 【SCCB接口协议简介(适用于OV系列摄像头)】

    SCCB总线简介 SCCB协议与IIC协议十分相似 不过IIC是PHILIPS的专利 所以OmnVision在IIC的基础上做了点小改动 SCCB最主要是阉割了IIC的连续读写的功能 即每读写完一个字节就主机必须发送一个NA信号 SCCB简
  • 场效应管(MOS)基础知识

    MOSFET管是常用的半导体器件 又称为开关管 场效应管 英文名称 MOSFET 简称MOS管 按元件封装工艺可分为两大类 插件类 贴片类 大部分MOSFET管的外观极其类似 常见的封装种类有T0 252 T0 251 T0 220 T0
  • 新年手打,24道进阶必备Elasticsearch 面试真题(建议收藏!)

    1 elasticsearch 了解多少 说说你们公司 es 的集群架构 索 引数据大小 分片有多少 以及一些调优手段 面试官 想了解应聘者之前公司接触的 ES 使用场景 规模 有没有做过比较大 规模的索引设计 规划 调优 解答 如实结合自
  • JavaScript修改Css样式

    在JS中操作CSS属性命名上的区别 以前css直接写死在html中 现在可以通过js脚本去动态修改一个标签的样式 CSS中写法 JS中的写法 说明 color color 一个单词的样式写法是相同 font size fontSize 驼峰
  • 将与参数无关的代码抽离templates——条款44

    Templates是节省时间和避免代码重复的一个奇方妙法 不再需要键入20个类似的classes而每一个带有15个成员函数 你只需键入一个class template 留给编译器去具现化那20个你需要的相关classes和300个函数 cl
  • 使用Java语言从零开始创建区块链

    Java区块链开发与交流群 613121183 有兴趣的也可以加下哈 提供了不少区块链资料 以后有资料可以相会共享 目前网络上关于区块链入门 科普的文章不少 本文就不再赘述区块链的基本概念了 如果对区块链不是很了解的话 可以看一下我之前收集
  • Java基础之方法部分

    Java中的方法好似c c python中的函数 方法是一种语法结构 它可以把一段代码封装成一个特定功能 减少代码重复 提高开发效率 使得代码逻辑更加清晰 更牛逼 方法格式 标志符 public static 方法返回类型 方法名 形式参数