零基础Java第七期:方法的使用

一、方法的概念与使用

1.1. 方法的概念

方法就是一个代码片段. 类似于 C 语言中的 "函数"。方法存在的意义:

  1. 是能够模块化的组织代码(当代码规模比较复杂的时候)
  2. 做到代码被重复使用, 一份代码可以在多个位置使用
  3. 让代码更好理解更简单
  4. 直接调用现有方法开发, 不必重复造轮子  

 比如我们要写一个方法来判断某一年是否为闰年,那我们可以写这么一组代码块:

public static boolean isLeapYear(int year){if((year%4==0 && year%100!=0)||year%400==0){return true;}return false

 接下来我们在main方法里面对这个方法进行调用,就可以实现对某一年是否是闰年进行判断了。

1.2. 方法的定义

//方法的定义
修饰符 返回值类型 方法名称([参数类型 形参]){方法体代码;return 返回值;
}
public static boolean isLeapYear(int year)

 修饰符:public static,现阶段的固定搭配。

返回值类型:boolean。如果方法有返回值,返回值类型必须要与返回的实体类型一致;如果没有返回值,必须写成 void

方法名称:isLeapYear,建议,方法名称的命名采用小驼峰,如Nextnum

参数类型:int

形式参数:year。如果有参数,需指定参数类型,多个参数之间使用逗号隔开;如果方法没有参数,()中什么都不写。

如果我们不写返回值,就会产生如下报错。

 注意:1.方法必须写在类当中

2.方法不能嵌套定义。比如下面这段代码,就会显示报错。

public static int Add(int a,int b){public static void fac()

3.在java当中,没有方法声明一说

以下为利用方法判断某一年是否为闰年的完整代码:

public class Main {public static boolean isLeapYear(int year){if((year%4==0 && year%100!=0) || year%400==0){return true;}else{return false;}}public static void main(String[] args) {boolean ret=isLeapYear();//在这个括号里面输入年份System.out.println(ret);}
}

1.3. 方法调用的执行过程

       调用方法--->传递参数--->找到方法地址--->执行被调方法的方法体--->被调方法结束返回--->回到主调方法继续往下 执行。定义方法的时候, 不会执行方法的代码。 只有调用的时候才会执行 ,并且一个方法可以被多次调用。

     比如我们炒菜的时候,炒菜的过程相当于方法的执行,原材料相当于实参,食材明细相当于形参,步骤相当于方法的定义。

1.4. 形参和实参的关系

        方法的形参相当于数学函数中的自变量。形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。怎么理解这个形参呢,就比如我们想得到一杯果汁,我们把水果(形参)放入榨汁机(方法),得到了果汁(实参)

       对于方法的调用,相当于在栈上开辟内存空间。当方法执行的时候,遇到return或者最后一个花括号执行完毕,就会把该方法开辟的栈帧回收掉。

交换两个整数,代码如下:

    public static void main(String[] args) {int a = 10;int b = 20;swap(a, b);System.out.println("main: a = " + a + " b = " + b);}public static void swap(int x, int y) {int tmp = x;x = y;y = tmp;System.out.println("swap: x = " + x + " y = " + y);}

 

        当我们调用这个swap方法时,形参a,b进行了交换,不会影响实参的值,因为运行到return时,a和b的栈帧直接被回收了。

二、方法重载

2.1. 方法重载的概念

public static int AddInt(int a,int b){return a+b;}public static double AddDouble(double a,double b){return c+d;}

       当我们写出多个方法时,需要提供不同的方法名,我们会因为取名称而感到头疼,此时我们可以用方法重载来解决这个问题。

       方法重载可以理解为自然语言的一词多义,当一个词语如果有多重含义,那么就说该词语被重载了,而在Java语言中也是可以实现重载的。

       构成方法重载的条件:1、方法名称一样; 2、参数列表不一样 (个数、类型、数据类型只要有一个不一样就算); 3、返回值没有要求。比如下面这两个方法,编译器就会报错,如下图所示。

public static int Add(int a,int b){return a+b;
}
public static int Add(int a,int b){return a+b;
}

    编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法,比如下面这段代码:

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

 2.2. 方法签名

       既然方法中不能定义两个名字一样的变量,那为什么类中就 可以定义方法名相同的方法呢?

      方法签名:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。编译器就会通过这个签名来确定你到底会不会进行方法重载。

三、递归

3.1. 递归的概念

      递归就是方法自己调用自己,相当与数学里面的数学归纳法。有一个起始条件, 然后有一个递推公式。很多小伙伴觉得递归比较难的原因呢就是因为递归公式比较难求。

      递归的必要条件:1、将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同;2、递归出口

3.2. 递归执行过程分析 

比如我们用N的阶乘来演示递归:

public static int fac(int n){if(n==1){return 1;}return n*fac(n-1);

       蓝色的箭头表示递的过程,红色的箭头表示归的过程,怎么递就怎么归回来。当n=1时,这个递归就会结束。递归是很浪费内存空间的,每一次递归,就会开辟一块新的内存空间。随着递归次数的增多,开辟的内存空间也会越来越大。

 

3.3. 递归的结束条件 

既然递归是自己调用自己,那我们如果写这么一段代码: 

    public static void func(){func();}public static void main(String[] args) {func();}

       如果没有结束条件或者结束条件不对。我们知道一个栈的内存空间是有限的,如果没有结束条件,则就会溢出,栈就会被挤爆,程序就会出问题。

四、 命令字符串

看下面这段代码

public class Main {public static void main(String[] args) {for(int i=0;i<args.length;i++){System.out.println(args[i]);}}
}

       这段代码运行之后不会有任何结果,我们可以这样运行。找到程序文件目录,有一个out文件,打开到以.class为后缀的字节码文件,在文件目录里输入cmd并回车,此时产生一个命令框,在里面输入“java Main(与public修饰的类相同) You are cool and handsome”,然后回车这段字符串就会存到args数组里面。我们可以理解为命令行参数,遍历这个数组,都进行了打印。

 

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

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

相关文章

Solidity基础语法

Solidity的在线编辑器&#xff1a;https://remix.ethereum.org/ 一、合约结构 1、SPDX许可标识&#xff1a;指定代码的开源许可 2、pragma指令&#xff1a;声明Solidity版本 3、导入语句&#xff1a;引入其他合约或库 4、合约声明&#xff1a;使用contract关键字 5、状态变量&…

直流和交流变频压缩机工作原理

直流变频压缩机工作原理&#xff1a; 压缩机定子产生旋转磁场与转子永磁磁场直接作用&#xff0c;实现压缩机运转。转子是永磁体&#xff0c;没有线圈/绕组&#xff0c;无需外部供电&#xff0c;不产生电能损耗&#xff0c;效率高、节能&#xff1b;直流变频压缩机属于同步控制…

查看电脑是使用集成显卡还是独立显卡

查看电脑是使用集成显卡还是独立显卡&#xff0c;可以通过以下几种方法&#xff1a; 1. 系统设备管理器&#xff1a; 在Windows系统中&#xff0c;可以通过设备管理器来查看。按下Win X键&#xff0c;然后选择“设备管理器”&#xff0c;在设备管理器中找到“显示适配器”…

uboot中mmc是使用

进入uboot的界面后 mmc命令 mmc list #查看有哪些可用的mmc设备 mmc dev 0 #切换到mmc的0设备&#xff0c;一般是指SD卡 ls mmc 0:1 #查看mmc 0设备&#xff08;sd卡&#xff09;中1分区保存的信息 ls mmc 0:2 #查看mmc 0设备&#xff08;sd卡&#xff09;中2分区保存的信…

java语法练习-题目

回文数 题目&#xff1a;给你一个整数x&#xff0c;如果x是一个回文整数&#xff0c;打印true&#xff0c;否则返回false 把数字倒过来和原来的数字进行比较 定义数字循环从右向左获取每一个数字拼接比较 public class test1 {public static void main(String[] args) {//1.定…

重构复杂简单变量之用对象替换数据值

对象替换数据值用于将简单的数据值替换为具有行为和逻辑的对象。这种优化的目的在于提高代码的可读性、灵活性和可维护性&#xff0c;尤其是在数据开始承载更多含义或行为的时候。 一、什么时候使用 当我们在代码中使用简单的数据值&#xff08;如字符串、整数&#xff09;表…

Leetcode 1129. 颜色交替的最短路径

1.题目基本信息 1.1.题目描述 给定一个整数 n&#xff0c;即有向图中的节点数&#xff0c;其中节点标记为 0 到 n – 1。图中的每条边为红色或者蓝色&#xff0c;并且可能存在自环或平行边。 给定两个数组 redEdges 和 blueEdges&#xff0c;其中&#xff1a; redEdges[i] …

WPF中的Setter

在 WPF (Windows Presentation Foundation) 中&#xff0c;Setter 是一个定义控件属性值的标记&#xff0c;通常用在 Style 或 Template 中。Setter 用于指定当某些条件满足时&#xff0c;控件的属性应该如何设置。以下是 Setter 的一些关键点&#xff1a; 属性设置&#xff1a…

顺序表算法题【不一样的解法!】

本章概述 算法题1算法题2算法题3彩蛋时刻&#xff01;&#xff01;&#xff01; 算法题1 力扣&#xff1a;移除元素 我们先来看这个题目的要求描述&#xff1a; 把与val相同数值的元素移除掉&#xff0c;忽略元素的相对位置变化&#xff0c;然后返回剩下与val值不同的元素个数…

ARM/Linux嵌入式面经(四六):华为

int32占字节数 问题回答: 在嵌入式系统开发中,数据类型的大小是至关重要的,因为它们直接影响到内存的使用、存储效率以及数据处理的性能。对于int32这一数据类型,它表示一个32位的整数。在大多数现代编程环境中,包括嵌入式系统开发中常用的C和C++语言,int32(或int32_t…

基于SpringBoot+Vue+uniapp的涪陵区特色农产品交易系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的视频演示 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

pytest中@pytest.fixture常用顺序function

ytest中pytest.fixture用法讲解 1、测试函数开始之前2、执行测试函数&#xff1a;3、测试函数结束后&#xff1a; 备注&#xff1a;内容来自chatGPT 在 pytest 中&#xff0c;pytest.fixture 是一个非常强大的功能&#xff0c;用于设置测试所需的环境和状态。它可以通过 scope…

Axios 的基本使用与 Fetch 的比较、在 Vue 项目中使用 Axios 的最佳实践

文章目录 1. 引言2. Axios 的基本使用2.1 安装 Axios2.2 发起 GET 请求2.3 发起 POST 请求2.4 请求拦截器2.5 设置全局配置 3. Axios 与 Fetch 的比较3.1 Axios 与 Fetch 的异同点3.2 Fetch 的基本使用3.3 使用 Fetch 处理 POST 请求 4. 讨论在 Vue 项目中使用 Axios 的最佳实践…

AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线

1、了解FITAP与AC的建立过程 之前我们已经知道了FATAP与FIT是一对双胞胎一样的兄弟&#xff0c;FAT哥哥能够直接独立使用当AP桥接、路由器等&#xff0c;而弟弟FIT则比较薄弱&#xff0c;独自发挥不出功效&#xff0c;需要一位师傅&#xff08;AC&#xff09;来带领&#xff0c…

React native之全局变量存储AsyncStorage

AsyncStorage是React native中对变量&#xff0c;对象进行全局存储&#xff0c;读取的异步使用对象。以key值进行存储。但是只能存储字符串数据&#xff0c;想存储对象&#xff0c;可把对象JSON进行序列化存储&#xff0c;读取的时候再转成JSON对象。 AsyncStorage.getItem()-…

ssm配置模式

新版 用Java类&#xff0c;全注解demo案例 1. AppConfig.java (Spring主配置类)package com.example.config;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.cont…

MATLAB实现AM调制解调

1.基本概念 1.1 AM调制原理 调幅就是使载波的振幅随调制信号的变化规律而变化。基带信号m(t)与直流分量A0相加&#xff0c;然后和高频载波相乘实现AM信号的调制&#xff0c;如图1所示。 1.2 AM解调原理 AM信号经过信道传输&#xff0c;引入噪声后&#xff0c;再和载波相乘&…

OpenCV之换脸技术:一场面部识别的奇妙之旅

在这个数字化与智能化并进的时代&#xff0c;图像处理技术日益成为连接现实与虚拟世界的桥梁。其中&#xff0c;换脸技术作为一项颇受欢迎且富有挑战性的应用&#xff0c;不仅让人惊叹于技术的魔力&#xff0c;更在娱乐、影视制作等领域展现了无限可能。今天&#xff0c;我们就…

arp欺骗及其实验

ARP欺骗&#xff08;ARP Spoofing&#xff09;是一种网络攻击技术&#xff0c;攻击者通过伪造ARP&#xff08;地址解析协议&#xff09;消息&#xff0c;将其MAC地址与目标IP地址关联&#xff0c;从而实现对网络流量的截获、篡改或重定向。以下是ARP欺骗的详细信息&#xff1a;…

怎么修改编辑PDF的内容,有这4个工具就行了。

PDF 软件在现代的办公或者是学习当中的应用非常广泛&#xff0c;编辑PDF内容对很多人来说也是一件常有的事情。如果有了PDF 编辑软件&#xff0c;查看&#xff0c;编辑&#xff0c;修改&#xff0c;分享也会变得更加方便简单&#xff0c;所以今天要给大家介绍几款这样的工具。 …