Java | 方法的定义 & 重载 & 递归
方法
方法就是一段用来完成特定功能的代码片段。
方法用于定义该类或该类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象。在面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。
方法的声明格式
修饰符1,修饰符2 .. 返回值类型 方法名(形式参数列表){
方法体;
}
- 修饰符:修饰符不是必须的要写的,java有自己默的方法饰符号。(default)
- 返回值:方法在执行完毕后返回给调用它的环境的数据。
- 返回值类型:事先约定好的返回值类型。
- 方法名:方法名是调用的时候用的,一般是用对象名调用。
- 形式参数:在方声明的时候用于接收外界传入的数据。
- 实参:调用方法时,实际传给方法的数据。
- 方法体:调用方法就是执行方法体里面的内容的。
方法的定义
/**
* main方法也是一个方法,它是一个程序的入口
*/
public static void main(String[] args) {
//调用方法的时候,得先创建一个对象
TestOne testOne = new TestOne();
//然后用对象调用方法
testOne.print();
testOne.add(1, 2);
int a = testOne.addNum(1, 2);
System.out.println(a); //结果为:3
}
//无参的方法,无返回值的方法
void print() {
System.out.println("这是一个无参的方法");
}
//有参无返回值的方法
void add(int a, int b) {
System.out.println(a + b);
}
//有参有返回值的方法
int addNum(int a, int b) {
return a + b;
}
方法的重载
方法的重载就是多个方法用同一个方法名,但是方法的参数列表不相同,参数的个数,参数的顺序不相同,参数的类型不相同。只是返回不相同可不是重载。
&esmp;方法的重载本质是两个方法本来就不是一个方法,只是名字相同罢了。
/**
* 原始方法 下面所有的方法名都一样。
* 但是参数上的不同,可以非常多的重载方法。
*/
int add(int a, int b) {
return a + b;
}
//参数的个数不相同
int add(int a, int b,int c) {
return a + b + c;
}
//形参不一样
double add(double a,int b) {
return a + b;
}
//形参不一样
double add(int a,double b) {
return a + b;
}
/*
//错误的,只有返回不相同不可以
long add(int a, int b) {
return a + b;
}
//错误的,参数名不相同也不可以
int add(int b, int a) {
return a + b;
}
*/
方法的递归
递归的本质就是一个方法自己调用自己。
但是递归是一种常见的解决问题的方法,即把问题简单化。利用递归可以用一些简单的程序来解决一些复杂的问题。
要使用递归必须要定义以下两点
1、定义递归头:就是什么时候不调用自身的方法。如果没有递归头,这个递归就是一个死循环。
2、递归体:就是什么时候需要调用自己。
只要掌握这两个的写法,就可以写好一个递归了。
下面有一个小例子来说明一下递归:(求n的乘阶)
public static void main(String[] args) {
long time1 = System.currentTimeMillis(); //求出程序执行前的时间
long a = sumNum(10); //递归的方法
long time2 = System.currentTimeMillis(); //求出程序执行后的时间
System.out.println("递归的结果是:" + a); //递归的结果是:3628800
System.out.println("花费的时间是:" + (time1 - time2));//花费的时间是:1
System.out.println("*************************");
long time3 = System.currentTimeMillis(); //求出程序执行前的时间
long b = sumNum2(10); //循环的方法
long time4 = System.currentTimeMillis(); //求出程序执行后的时间
System.out.println("循环的结果是:" + a); //递归的结果是:3628800
System.out.println("花费的时间是:" + (time3 - time4));//花费的时间是:0
}
//用递归求n的乘阶
static long sumNum(int n) {
if (n == 1) { //递归头
return 1;
} else { //递归体
return n * sumNum(n - 1);
}
}
//用循环求n的乘阶
static long sumNum2(int n) {
int result = 1; //接收计算结果
while(n>1) {
result *= n*(n-1); //实现计算结果的累乘操作
n -= 2; //每次减去2,实现数字的迭代操作
}
return result;
}

上面这张图片说明了,递归是一个方法套一个方,然后从递归头结束,再进行返回,所以说执行的速度比循环慢。
这两个例子表明,递归还是不如循环好使,因为大部分递归可以实现的东西,循环都可以实现,并且比递归还要好理解,并且不占内存,不会报无缘无故的错,并且循环执行的时间比递归的时间执行的时间少。
但是并不是全都不使用递归了,该用的地方还是会用递归的,但是常用的方法,我们还是用循环解决吧!
细节决定成败!
个人愚见,如有不对,恳请扶正!
Java | 方法的定义 & 重载 & 递归的更多相关文章
- Java方法之定义形式及可变参数
目录 Java方法之定义形式及可变参数 方法调用 使用static修饰的方法 没有static修饰的方法 方法的定义格式 无参无返 无参有返 有参无返 有参有返 形参个数可变的方法 采用数组形参来定义 ...
- Java方法的定义以及调用、方法重载、可变参数以及递归
目录 何谓方法 方法的定义及调用 方法的定义 方法调用 方法重载 命令行传参 可变参数 递归 何谓方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于 ...
- 11. Java方法的定义与使用
1.1方法的定义 方法是一段可以被重复调用的代码块. 方法的声明: public static 方法返回值 方法名称 ([参数类型 变量...]) 方法体代码: [return 返回值]: 当方法以v ...
- 22.java方法的定义
java中的方法:就相当于c语言中的函数:sun在开发java的时候,为提高其代码的重复利用率,引入了方法. 什么是方法? 方法就是一段代码片段,这个片段可以完成特定的功能,并且可以重复利用. 从入口 ...
- java 方法的定义与调用
/* 定义一个方法的格式: public static void 方法名称(){ 方法体 } 方法名称的命名规则和变量一样,使用小驼峰 方法体:也就是大括号里面的可以包含任何语句 注意事项: 1.方法 ...
- Java方法的定义和使用
/* 定义一个方法的格式: public static void 方法名称() { 方法体 } 方法名称的命名规则和变量一样,使用小驼峰. 方法体:也就是大括号当中可以包含任意条语句. 注意事项: 1 ...
- Java方法02——定义与调用
方法的定义与调用 定义与调用 例子 package method; public class Demon03 { public static void main(String[] arg ...
- Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组
类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...
- java方法名的重载
方法的重载:方法名相同,参数不同,按照参数类型进行匹配 创建一个Simple 类,然后定义了两个方法 package cuteSnow; public class Simple { // 方法的重载, ...
随机推荐
- systemverilog动态数组
- 重新整理 .net core 实践篇—————配置系统之简单配置中心[十一]
前言 市面上已经有很多配置中心集成工具了,故此不会去实践某个框架. 下面链接是apollo 官网的教程,实在太详细了,本文介绍一下扩展数据源,和简单翻翻阅一下apollo 关键部分. apollo 服 ...
- 书列荐书 |《黑天鹅·如何应对不可预知的未来》【美】纳西姆 尼古拉斯 塔勒布 著
你不知道的事比你知道的事更有意义,因为生活中发生了许多微小的事情,尽管出现的概率非常小,但是却以某一种巨大的力量影响我们的生活.但是由于思维习惯的问题,导致我们看问题的方式使得我们不能很快地把握事物的 ...
- 智能物联网(AIoT,2020年)(上)
智能物联网(AIoT,2020年)(上) 中国AloT的概念与现状 01智能物联网(AIoT)定义 人工智能与物联网的协同应用 02 AIoT2025产业瞭望:家庭AI管家 智能家居交互方式无感化,跨 ...
- NVIDIA A100 GPUs上硬件JPEG解码器和NVIDIA nvJPEG库
NVIDIA A100 GPUs上硬件JPEG解码器和NVIDIA nvJPEG库 Leveraging the Hardware JPEG Decoder and NVIDIA nvJPEG Lib ...
- 编译原理-翻译程序(Translator)
分为编译程序(compiler)和解释程序(interpreter) 编译程序:把源程序(高级语言编写)转换成目标程序(汇编语言或机器语言编写). 解释程序:对源程序边翻译边执行. 编译型语言 优点: ...
- 在spring配置文件中引入外部properties配置文件 context:property-placeholder
在spring的配置文件中,有时我们需要注入很多属性值,这些属性全都写在spring的配置文件中的话,后期管理起来会非常麻烦.所以我们可以把某一类的属性抽取到一个外部配置文件中,使用时通用spring ...
- XML文件存在中文注释报错问题( 3 字节的 UTF-8 序列的字节 3 无效)
今天在做mybatis项目的时候,给映射文件添加了中文注释后,程序就报错.把中文注释删除后,程序又可以正常执行.解决方法在下文提到. 我的xml映射文件如下: <?xml version=&qu ...
- 二、创建测试JSP页面
root@web1 ~]# rm -rf /usr/local/tomcat/webapps/ROOT/* 1.创建测试网页 [root@web1 ROOT]# vim /usr/local/tomc ...
- robotframework常用关键字
robotframework关键字 可以将关键字看作是处理数据的方法.robotframework的关键字和测试数据组成了测试用例. robotframework关键字包括系统关键字和用户关键字.用户 ...