Java方法的使用(重点:形参和实参的关系、方法重载、递归)
目录
一、Java方法
* 有返回类型,在方法体里就一定要返回相应类型的数据。没有返回类型(void),就不要返回!! * 方法没有声明一说。与C语言不同(C语言是自顶向下读取代码),而Java是全局的,所以不管在main前面或者后面的方法(函数),都能被识别到。 * 同C语言一样,函数不能嵌套定义。Java的方法也不能嵌套定义。
二、实参和形参的关系
在Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体
三、方法的重载
1.在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。
/** * 方法重载 * 1.方法名 必须相同 * 2.参数列表不同(个数、类型、顺序) * 3.返回类型不影响 */
2.方法签名
四、递归
一、Java方法
同C语言一样,要反复实现一个效果和功能的时候,我们为了方便写了一个有一个函数去调用。Java的方法也类似。
![]()
* 有返回类型,在方法体里就一定要返回相应类型的数据。没有返回类型(void),就不要返回!!
* 方法没有声明一说。与C语言不同(C语言是自顶向下读取代码),而Java是全局的,所以不管在main前面或者后面的方法(函数),都能被识别到。
* 同C语言一样,函数不能嵌套定义。Java的方法也不能嵌套定义。//方法不能嵌套定义!!!err!!! // public static void main1(String[] args) { // public static void main2(String[] args){ // // } // } }
* 且方法只能写在类当中
举例:实现一个求两数之和的方法
public class Method{ // 方法的定义 public static int add(int x, int y) { return x + y; } }
二、实参和形参的关系
在Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体
public static void swap(int a,int b) {int tmp = a;a = b;b = tmp;}public static void main3(String[] args) {int x = 10;int y = 20;System.out.println("交换前:x = "+x+" y = "+y);swap(x,y);//形参只是实参的临时拷贝,虽然在函数里交换了值,出了函数就会被销毁,并没有影响实参//不同于C语言,Java没有指针。如果希望改变实参,需要后期学到类和对象。System.out.println("交换后:x = "+x+" y = "+y);}
![]()
可以发现,交换前后并没有变化,也就是根本没有交换。
这其实并不是我们编写的方法有问题,而是 形参和实参的关系 没有理解
分析:
![]()
实参 a 和 b 是 main 方法中的两个变量,其空间在 main 方法的栈 ( 一块特殊的内存空间 ) 中,而形参 x 和 y 是 swap 方法中 的两个变量,x 和 y 的空间在 swap 方法运行时的栈中,因此:实参 a 和 b 与 形参 x 和 y 是两个没有任何关联性的变量, 在 swap 方法调用时,只是将实参 a 和 b 中的值拷贝了一份传递给了形参 x 和 y ,因此对形参 x 和 y 操作不会对实参 a 和 b产生任何影响。注意:对于 基础类型 来说 , 形参相当于实参的拷贝 . 即 传值调用
三、方法的重载
以add举例,这里定义的求两数之和的的参数,是int和int,那假如我要求float和float的和呢?
public class Method{ // 方法的定义 public static int add(int x, int y) { return x + y; } }可以在定义个add2
public class Method{ // 方法的定义 public static int add2(float x, float y) { return x + y; } }但是还有其他类型都要一个一个重新定义方法吗?
1.在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。
/**
* 方法重载
* 1.方法名 必须相同
* 2.参数列表不同(个数、类型、顺序)
* 3.返回类型不影响
*/例如:我这个两个方法都叫add,参数列表不同,就是方法重载。
方法重载的好处就是,只需要记住一个方法名,就可以调用实现相同的功能(尽管参数不同)
public static int add(int a, int b) {return a + b;}public static double add(double a, double b) {return a + b;}public static void main3(String[] args) {System.out.println(add(4, 6));System.out.println(add(1.2,3.8));}
2.方法签名
在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那 为什么 类中就可以定义方法名相同的方法 呢?方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式: 方法全路径名+参数列表+返回值类型 ,构成 方法完整的名字。
以上面的add来看,虽然两个类都叫add,但是由于参数不同,构成的完整的方法名其实是不同的,这样也能区别两个类。
上述代码经过编译之后,然后使用 JDK 自带的 javap 反汇编工具查看,具体操作:1. 先对工程进行编译生成 .class 字节码文件2. 在控制台中进入到要查看的 .class 所在的目录3. 输入: javap -v 字节码文件名字即可![]()
四、递归
一个方法在执行过程中调用自身 , 就称为 " 递归 "。
例如:求n的阶乘,以及阶乘之和
public static long fac(long n) {int ret = 1;for (int i = 1;i <= n;i++){ret *= i;}return ret;}public static long facNum(long k) {long sum = 0;for (int i = 1; i <= k; i++) {sum += fac(i);}return sum;}public static void main2(String[] args) {long a = fac(5);System.out.println(a);long b = facNum(5);System.out.println(b);}每调用自己一次,就是递的过程,但是往下递的时候自己这个函数并没有销毁。(1,2,3,4就是递)等到最底层,无法继续递的时候,开始将结果,一层一层返回,这个就是归(5,6,7,8就是归)。返回一层,就将这个函数销毁。直到最后返回ret到main函数里。
相关文章:
Java方法的使用(重点:形参和实参的关系、方法重载、递归)
目录 一、Java方法 * 有返回类型,在方法体里就一定要返回相应类型的数据。没有返回类型(void),就不要返回!! * 方法没有声明一说。与C语言不同(C语言是自顶向下读取代码)&#…...
登录页的具体实现 (小兔鲜儿)【Vue3】
登录页 整体认识和路由配置 整体认识 登录页面的主要功能就是表单校验和登录登出业务 准备模板 <script setup></script><template><div><header class"login-header"><div class"container m-top-20"><h1 cl…...
大学如何自学嵌入式开发?
1. C语言:C语言是基础中的基础,刚开始学习不用太深入,一本常用的C语言的教材即可,注意不是当教科书看,而是看完一节过后,打开电脑把后面的习题都写出来,并且编译运行一遍,一定要动手…...
pytorch学习——线性神经网络——1线性回归
概要:线性神经网络是一种最简单的神经网络模型,它由若干个线性变换和非线性变换组成。线性变换通常表示为矩阵乘法,非线性变换通常是一个逐元素的非线性函数。线性神经网络通常用于解决回归和分类问题。 一.线性回归 线性回归是一种常见的机…...
00 - RAP 开发环境配置
文章目录 [1] Eclipse - ADT[2] BTP / S4HC[3] Add ABAP Env. Service[4] Conn. to BTP [1] Eclipse - ADT 关于如何安装配置,参见文章: Install ABAP Development Tools (ADT) and abapGit Plugin Eclipse Eclipse - ADT Eclipse - abapGit Plugin [2] BTP / S4…...
山西电力市场日前价格预测【2023-08-01】
日前价格预测 预测明日(2023-08-01)山西电力市场全天平均日前电价为310.15元/MWh。其中,最高日前电价为335.18元/MWh,预计出现在19: 45。最低日前电价为288.85元/MWh,预计出现在14: 00。 价差方向预测 1:实…...
QT--day5(网络聊天室、学生信息管理系统)
服务器: #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间servernew QTcpServer(this); }Widget::~Widget() {delete ui; …...
【用IDEA基于Scala2.12.18开发Spark 3.4.1 项目】
目录 使用IDEA创建Spark项目设置sbt依赖创建Spark 项目结构新建Scala代码 使用IDEA创建Spark项目 打开IDEA后选址新建项目 选址sbt选项 配置JDK debug 解决方案 相关的依赖下载出问题多的话,可以关闭idea,重启再等等即可。 设置sbt依赖 将sbt…...
HEVC 速率控制(码控)介绍
视频编码速率控制 速率控制: 通过选择一系列编码参数,使得视频编码后的比特率满足所有需要的速率限制,并且使得编码失真尽量小。速率控制属于率失真优化的范畴,速率控制算法的重点是确定与速率相关的量化参数(Quantiz…...
四大软件测试策略的特点和区别(单元测试、集成测试、确认测试和系统测试)
四大软件测试策略分别是单元测试、集成测试、确认测试和系统测试。 一、单元测试 单元测试也称为模块测试,它针对软件中的最小单元(如函数、方法、类、模块等)进行测试,以验证其是否符合预期的行为和结果。单元测试通常由开发人…...
ingress-nginx controller安装
文章目录 一、ingress-nginx controller安装环境 1.1 部署yaml1.2 镜像1.3 安装操作 一、ingress-nginx controller安装 环境 kubernetes版本:1.27.1操作系统:CentOS7.9 1.1 部署yaml deploy.yaml apiVersion: v1 kind: Namespace metadata:labels:…...
开源快速开发平台:做好数据管理,实现流程化办公!
做好数据管理,可以提升企业的办公协作效率,实现数字化转型。开源快速开发平台是深受企业喜爱的低代码开发平台,拥有多项典型功能,是可以打造自主可控快速开发平台,实现一对一框架定制的软件平台。在快节奏的社会中&…...
基于深度学习的裂纹图像分类研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
TypeScript入门学习汇总
1.快速入门 1.1 简介 TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准。 TypeScript 由微软开发的自由和开源的编程语言。 TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在…...
Vue3使用vxetable进行表格的编辑、删除与新增
效果图如下: vxetable4传送门 一、引入插件 package.json中加入"vxe-table": "4.0.23",终端中执行npm i导入import {VXETable, VxeTableInstance...
JUC 并发编程之JMM
目录 1. 内存模型JMM 1. 1 主内存和工作内存 1.2 重排序 1. 内存模型JMM Java内存模型是Java虚拟机(JVM)规范中定义的一组规则,用于屏蔽各种硬件和操作系统的内存访问差异,保证多线程情况下程序的正确执行。Java内存模型规定了…...
k8s集群中安装kibana 7.x 踩坑
1. FATAL ValidationError: child "server" fails because [child "port" fails because ["port" must be a number]] 解决办法: 在环境变量中指定端口: - name: SERVER_PORTvalue: 5601 2. Kibana FATAL Error: [elast…...
CSS的一些基础知识
选择器: 选择器用于选择要应用样式的HTML元素。常见的选择器包括标签选择器(如 div、p)、类选择器(如 .class)、ID选择器(如 #id)和伪类选择器(如 :hover)。选择器可以根…...
解决多线程环境下单例模式同时访问生成多个实例
如何满足单例:1.构造方法是private、static方法、if语句判断 ①、单线程 Single类 //Single类,定义一个GetInstance操作,允许客户访问它的唯一实例。GetInstance是一个静态方法,主要负责创建自己的唯一实例 public class LazySi…...
转转闲鱼交易猫源码搭建
后台一键生成链接,独立后台管理 教程:修改数据库config/Conn.php 不会可以看源码里有教程 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
