方法

方法就是一段用来完成特定功能的代码片段。

  方法用于定义该类或该类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象。在面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。

方法的声明格式

修饰符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 | 方法的定义 & 重载 & 递归的更多相关文章

  1. Java方法之定义形式及可变参数

    目录 Java方法之定义形式及可变参数 方法调用 使用static修饰的方法 没有static修饰的方法 方法的定义格式 无参无返 无参有返 有参无返 有参有返 形参个数可变的方法 采用数组形参来定义 ...

  2. Java方法的定义以及调用、方法重载、可变参数以及递归

    目录 何谓方法 方法的定义及调用 方法的定义 方法调用 方法重载 命令行传参 可变参数 递归 何谓方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于 ...

  3. 11. Java方法的定义与使用

    1.1方法的定义 方法是一段可以被重复调用的代码块. 方法的声明: public static 方法返回值 方法名称 ([参数类型 变量...]) 方法体代码: [return 返回值]: 当方法以v ...

  4. 22.java方法的定义

    java中的方法:就相当于c语言中的函数:sun在开发java的时候,为提高其代码的重复利用率,引入了方法. 什么是方法? 方法就是一段代码片段,这个片段可以完成特定的功能,并且可以重复利用. 从入口 ...

  5. java 方法的定义与调用

    /* 定义一个方法的格式: public static void 方法名称(){ 方法体 } 方法名称的命名规则和变量一样,使用小驼峰 方法体:也就是大括号里面的可以包含任何语句 注意事项: 1.方法 ...

  6. Java方法的定义和使用

    /* 定义一个方法的格式: public static void 方法名称() { 方法体 } 方法名称的命名规则和变量一样,使用小驼峰. 方法体:也就是大括号当中可以包含任意条语句. 注意事项: 1 ...

  7. Java方法02——定义与调用

    方法的定义与调用 定义与调用 例子  package method; ​ public class Demon03 {     public static void main(String[] arg ...

  8. Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组

    类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...

  9. java方法名的重载

    方法的重载:方法名相同,参数不同,按照参数类型进行匹配 创建一个Simple 类,然后定义了两个方法 package cuteSnow; public class Simple { // 方法的重载, ...

随机推荐

  1. 做个地道的c++程序猿:copy and swap惯用法

    如果你对外语感兴趣,那肯定听过"idiom"这个词.牛津词典对于它的解释叫惯用语,再精简一些可以叫"成语".想要掌握一门语言,其中的"成语" ...

  2. 【Python】神器:Streamlit,仅使用Python开发一个运维管理后台(不需要编写html,js,css)

    背景 作为SRE,我们有很多很多自动化的工具,大部分都是自动运行的,还有一部分是CLI,我们一直苦于没有一个自己的管理后台网站,受限于前端能力薄弱,开发出来的网页只能说凑活能用,但是不好用. 现在我们 ...

  3. 支持边云协同终身学习特性,KubeEdge子项目Sedna 0.3.0版本发布!

    摘要:随着边缘设备数量指数级增长以及设备性能的提升,边云协同机器学习应运而生,以期打通机器学习的最后一公里. 本文分享自华为云社区<支持边云协同终身学习特性,KubeEdge子项目Sedna 0 ...

  4. Python+Selenium自动化 模拟鼠标操作

    Python+Selenium自动化 模拟鼠标操作   在webdriver中,鼠标的一些操作如:双击.右击.悬停.拖动等都被封装在ActionChains类中,我们只用在需要使用的时候,导入这个类就 ...

  5. Jmeter- 笔记10 - 在GUI生成html报告

    步骤1.在聚合报告,浏览一个存放jtl文件的路径,输入不存在的jtl文件,确定后会出现如下图弹窗,不用理会,关掉 步骤2.运行脚本 步骤3.打开工具 -> Generate HTML repor ...

  6. node和gulp版本的坑

    现在node版本最新的稳定版在14+ 然后我在接手项目的时候使用gulp打包,怎么也打包不了,这个问题纠结了挺久,然后百度了下,发现版本的问题 node 12+ 以上的版本不兼容 gulp 3的版本 ...

  7. Httprunner的使用

    一.httprunner的简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种 ...

  8. 一文搞懂Ajax,附Ajax面试题

    目录 前言 正文 Ajax是什么东西? 实现核心/工作原理:XMLHttpRequest对象 XMLHttpRequest大致用法 创建XMLHttpRequest对象 发送请求 服务器响应 1. r ...

  9. 【Android编程】Java利用apktool编写Metasploit恶意后门注入工具

    /声明:本文作者Kali_MG1937 csdn博客id:ALDYS4 QQ:3496925334 未经许可禁止转载!/ 注意,本文为作者从CSDN搬迁至此的文章 注意!此文章虽然 未被 作者标记到 ...

  10. 【模板】 RMQ求区间最值

    RMQ RMQ简单来说就是求区间的最大值(最小值) 核心算法:动态规划 RMQ(以下以求最大值为例) F[i,j]表示 从 i 开始 到i+2j -1这个区间中的最大值 状态转移方程 F[i,j]=m ...