当前位置: 首页 > news >正文

JavaSE入门---认识方法

文章目录

  • 什么是方法?
  • 方法定义
    • 实参和形参的关系
    • 没有返回值的方法
  • 方法重载
  • 方法签名

什么是方法?

在编程中某段功能的代码可能频繁使用到,如果在每个位置都重新实现一遍,会有一些缺点,比如:

  1. 使程序变得繁琐
  2. 开发效率低下,做了大量重复性的工作
  3. 不利于维护,需要改动时,所有用到该段代码的位置都需要修改
  4. 不利于复用

因此,在编程中我们也可以将频繁使用的代码封装成“方法”(方法就是一个代码片段. 类似于 C 语言中的 “函数”),需要时直接拿来使用即可,避免了一遍一遍的累赘。

方法定义

方法语法格式

修饰符 返回值类型 方法名称(参数类型 参数…){
方法体代码
【return 返回值】
}

//示例:public int func(int num){System.out.println(num);return num;}

注:

  1. 修饰符:比如public、private等。有多种类型,不同类型有不同意义(后续介绍)
  2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致;如果没有返回值,则必须写成void
  3. 方法名称:小驼峰命名
  4. 参数列表:如果没有参数()内则不需要写;如果有参数,需要指定参数类型,多个参数之间用,隔开
  5. 方法体:写方法内部要执行的语句
  6. 特别说明:在Java中,方法必须写在类中;方法不能嵌套定义;没有方法声明的说法

实参和形参的关系

在Java中,实参的值永远都是拷贝到形参中(形参是实参的临时拷贝),形参和实参本质是两个实体

    //用形参x、y来接收实参传递的10、20public static int add(int x,int y){return x+y;}public static void main(String[] args) {int ret = add(10,20);}

但是这样的写法会有一些问题,比如:

	//交换a和b的值public static void swap(int x,int y){int tmp = x;x = y;y = tmp;}public static void main(String[] args) {int a = 10;int b = 20;System.out.println(a);   //10System.out.println(b);   //20swap(a,b);     //交换a和b的值System.out.println(a);   //10System.out.println(b);   //20}

我们明明已经将a和b的值交换了,为什么打印初来的结果还是没有交换呢?
原因:
就像上面说的,实参a和形参x是完全不同的俩个实体,实参b和形参y也是俩个完全不同的实体。他们仅仅只是因为拷贝的原因值相同而已,再没有什么关系。在调用swap方法时,交换的是x和y的值。对main函数中的a和b没有影响。

解决
对于基础类型来说,形参是实参的临时拷贝,即”传值调用“。
我们需要的是“传址调用”,但Java中没有指针的概念,所以我们需要用到引用类型,通过传递引用类型的参数来解决问题。

	public static void swap(int[] arr){int tmp = arr[0];arr[0] = arr[1];arr[1] = tmp;}public static void main(String[] args) {int[] arr = {10,20};System.out.println(arr.toString());  //打印原数组内容swap(arr);System.out.println(arr.toString());  //打印交换后的数组内容}

没有返回值的方法

方法的返回值是可选的。有时可能没有,在没有返回值的时候就需要把返回值类型写为void

	// 只需要打印a的值  不需要用到返回值public static void print(int x){System.out.println(x);}public static void main(String[] args) {int a = 10;print(a);}

方法重载

对于同一个方法,我们根据不同的场景可能需要使用不同的参数列表,按照以往的知识,我们需要创建不同的方法来满足不同需求,这就意味着我们需要起不同的方法名,而取名字本来就是让人头疼的事情。那能否将所有的方法都使用一个方法命呢? 当然可以,这就是方法的重载。

	//实现加法public static void add(int x){System.out.println(x);}public static void add(int x,int y){System.out.println("x |" + "y");}public static void add(double x,double y){System.out.println("x | " + "y");}

注:

  1. 方法名必须相同
  2. 参数列表必须不同(即参数的个数不同、参数的类型不同、参数的次序不同)
  3. 与返回值类型是否相同无关
  4. 在方法调用时,编译器会对实参类型进行判断,根据判断的结果来确定调用哪个方法

方法签名

在同一个作用域中不能定义两个相同名称的标识符。比如:在一个方法中不能定义两个名字一样的变量。那为什么类中就可以定义方法名相同的方法(方法重载)呢? 这就是方法签名的缘故!

方法签名:即方法经过编译器编译修改之后最终的名字(具有唯一性),他与我们最开始对他的命名不同。而系统使用的方法名是方法签名,不是我们的命名。所以可以起相同名称的方法名。

方法签名的具体形成方式:方法全路径名+参数列表+返回值类型

相关文章:

JavaSE入门---认识方法

文章目录 什么是方法?方法定义实参和形参的关系没有返回值的方法 方法重载方法签名 什么是方法? 在编程中某段功能的代码可能频繁使用到,如果在每个位置都重新实现一遍,会有一些缺点,比如: 使程序变得繁琐…...

编译[Bug]——too few arguments for template template parameter “Tuple“ detected

项目场景: 当使用高版本的cuda去安装低版本pytorch,并且编译用低版本pytorch写的cuda算子时,或者说是VS的版本过高如2022和2019,都有可能会出现某个.h文件或者.c文件报错,如: error: too few arguments f…...

网工内推 | 南天软件,base北京,需持有CCIE认证,最高25k

01 北京南天软件有限公司 招聘岗位:IPT运维工程师 职责描述: 负责客户Cisco语音网络IPT ,CUCM的日常运维,扩容和项目支持,支持路由交换,无线等项目,实施工作以及相关实施文档。 任职要求: 1、…...

Unity有限状态机的简易实现

本人嘴笨,不会说。 该代码实现一个功能较为齐全的有限状态机,可用于大部分的应用场景。 大致实现几个功能 状态更新状态转换状态消息处理全局状态转换和反转状态(转换为前一个状态) 代码分为 状态类状态管理类枚举(…...

什么是NetApp的DQP和如何安装DQP?

首先看看什么是DQP,DQPDisk Qualification Package,文字翻译就是磁盘验证包。按照NetApp的最佳实践,要定期升级DQP包,保证对最新磁盘和磁盘扩展柜的兼容。 本文主要介绍7-mode下如何升级DQP,至于cluster mode另外文章…...

Vue之Vue的介绍安装开发实例生命周期钩子

博主心得: keyup必须与change一起使用v-on.click可以直接写成clickclick“setVal”里的setVal换成数字之后有惊喜VS Code是真的狗,一些报错根本不会直接显示总结:VS code太狗了 1.vue介绍 1.1 什么是vue vue是一个构建用户界面UI的渐进式jav…...

【计网】计算机网络概述

目录 一、计算机网络的概念 二、计算机网络的组成 1、从组成部分上看 2、从工作方式上看 3、从功能组成上看 三、计算机网络的功能 1、数据通信 2、资源共享 3、分布式处理 4、提高可用性 5、负载均衡 四、计算机网络的分类 1、按分布范围 1.广域网 2.城域网 3.…...

初识Java 14-1 测试

目录 测试 单元测试 JUnit 测试覆盖率 前置条件 断言 Java提供的断言语法 Guava提供的更方便的断言 契约式设计中的断言 DbC 单元测试 Guava中的前置条件 本笔记参考自: 《On Java 中文版》 测试 ||| 如果没有经过测试,代码就不可能正常工作…...

react常用的hooks有哪些?

React常用的Hooks包括以下几种: 1.useState:用于在函数组件中创建和管理状态。它返回一个数组,第一个值是当前状态的值,第二个值是更新状态的函数。 使用时,首先通过解构赋值获取状态值和更新函数,并设置初…...

Nacos config 配置中心详解

目录 一、Nacos启动 1.预备环境准备 2.下载编译后压缩包方式 3. 启动服务器 二、 配置管理 多配置格式编辑器 编辑DIFF 示例代码 监听者查询 配置的版本及一键回滚 命名空间管理 登录管理 修改默认用户名/密码方法 关闭登录功能 会话时间 三、启动配置管理 添加依赖&#xff1a…...

C++ UDP通信

#pragma once #ifndef XUDP_H #define XUDP_H#ifdef WIN32 #include <windows.h> #define socklen_t int #else #include <arpa/inet.h> #define closesocket close //替换close函数 #include <unistd.h>#include<iostream> #endifclass XUdp { pub…...

自由程序员想接私活?那你还不得知道这几个接单平台!最后一个就是宝藏!!

相信喜欢搞钱的程序员都知道&#xff0c;平常在平台上接点私活&#xff0c;利用闲暇时间接单是搞钱的常用套路&#xff0c;可是你确定你选对平台了吗&#xff1f;不管你是刚准备接单的小白&#xff0c;还是已经干了一段时间的老油条&#xff0c;都建议你看完本期文章&#xff0…...

二叉树与递归的相爱相杀

数据结构之二叉树 一、基于二叉树的基础操作1.二叉树的构建2.二叉树的遍历①前序遍历&#xff08;深度遍历&#xff09;②中序遍历③后序遍历④层序遍历判断一棵二叉树是否是完全二叉树&#xff08;基于层序遍历的思想&#xff09; 3.二叉树的数量问题①求二叉树结点个数②求二…...

Docker 安装 reids

docker run -itd --name myredis -p 6379:6379 redis --requirepass “123456” --restartalways --appendonly yes...

opensl学习——base16编码解码、base64编码解码、ASCII码表、扩展ASCII码

文章目录 ASCII表概述base家族简单说明 Hex(十六进制)编码、Base32编码、Base64编码、base256编码base16编码与解码base64编码概述转换过程不足 3 字节处理方法例子一,不足3字节&#xff0c;只有一个字节例子二,不足3字节&#xff0c;只有两个字节 base64示例代码1代码分析 acl…...

gazebo各种插件

类别 libgazebo_ros_api_plugin.so&#xff1a;提供与Gazebo仿真环境进行通信的API接口。 libgazebo_ros_block_laser.so&#xff1a;模拟激光传感器的插件。 libgazebo_ros_bumper.so&#xff1a;模拟碰撞传感器的插件。 libgazebo_ros_camera.so&#xff1a;模拟相机传感器的…...

C语言Free空指针会怎样?

在C语言中&#xff0c;使用free函数释放一个空指针是安全的&#xff0c;不会引发任何错误或异常。具体来说&#xff0c;当使用free函数释放一个空指针时&#xff0c;free函数会忽略这个空指针&#xff0c;并且不会执行任何操作。这是因为free函数只对有效的指针进行内存释放操作…...

软件测试全套教程,软件测试自学线路图

软件测试&#xff1a; 软件测试是为了发现程序中的错误而执行程序的过程。 通俗的说&#xff0c;软件测试需要在发布软件之前&#xff0c;尽可能的找软件的错误&#xff0c;尽量避免在发布之后给用户带来不好的体验&#xff0c;并要满足用户使用的需求。 现在市面上这么多软…...

禁止浏览器缩放

禁止浏览器缩放 1. 页面中添加如下代码&#xff1a;2. css单位统一使用rem&#xff0c;如下&#xff1a; 两个条件即可实现&#xff1a; 1. 动态修改html属性fontsize的值&#xff1b; 2. css单位统一使用rem。 1. 页面中添加如下代码&#xff1a; // 定义基准字体 new functi…...

前端食堂技术周刊第 100 期:TS 5.3 Beta、ViteConf2023、Rspress 1.0、Fresh 1.5、Chrome 118

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;乌龙金桂 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看下…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...