方法

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

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

方法的声明格式

修饰符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. Runtime PM 处理不当导致的 external abort on non-linefetch 案例分享

    硬件平台:某ARM SoC 软件平台:Linux 1 Runtime PM 简介 在介绍 Runtime PM 之前,不妨先看看传统的电源管理.传统的电源管理机制,称之为 System PM(Syst ...

  2. Nginx实战部署常用功能演示(超详细版),绝对给力~~~

    前言 上次分享了一些开发过程中常用的功能,但如果到真实环境中,其实还需要一些额外的配置,比如说跨域.缓存.配置SSL证书.高可用等,老规矩,还是挑几个平时比较常用的进行演示分享.上篇详见Nginx超详 ...

  3. PDF 文件编写器 C# 类库(版本 1.28.0)使用详解

    PDF File Writer 是一个 C# .NET 类库,允许应用程序创建 PDF 文件. PDF File Writer C# 类库使 .NET 应用程序能够生成 PDF 文档.该库使应用程序免 ...

  4. GO学习-(6) Go语言基础之运算符

    Go语言基础之运算符 运算符用于在程序运行时执行数学或逻辑运算. 运算符 Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 算数运算符 运算符 描述 + 相加 - ...

  5. ONNX 实时graph优化方法

    ONNX 实时graph优化方法 ONNX实时提供了各种图形优化来提高模型性能.图优化本质上是图级别的转换,从小型图简化和节点消除,到更复杂的节点融合和布局优化. 图形优化根据其复杂性和功能分为几个类 ...

  6. 从PyTorch到ONNX的端到端AlexNet

    从PyTorch到ONNX的端到端AlexNet 这是一个简单的脚本,可将Torchvision中定义的经过预训练的AlexNet导出到ONNX中.运行一轮推理Inference,然后将生成的跟踪模型 ...

  7. vscode使用版本控制git commit unstaged时提示对话框的设置

    使用 vscode 版本控制提交代码时,如果有 unstaged file,会有一个弹出框: 选择 always 或者 never ,这个框下次就不再弹出了. 如果你想让他再次出现,请去setting ...

  8. APP的闪退和无响应

    1.app闪退(crash,崩溃):程序异常退出不再运行 闪退的原因: a.程序内部逻辑错误(因算法或网络连接引起的异常,或是为捕捉到的错误) b.系统自身异常:一般自定ROM或刷机后比较常见 c.运 ...

  9. 【NX二次开发】获取指定矩阵标识的矩阵值

    函数:UF_CSYS_ask_matrix_values () 函数说明:获取指定矩阵标识的矩阵值. 用法: #include <uf.h> #include <uf_csys.h& ...

  10. 重磅!GitHub官方开源新命令行工具

    近日,GitHub 发布命令列工具 (Beta) 测试版,官方表示,GitHub CLI提供了一种更简单.更无缝的方法来使用Github.这个命令行工具叫做GitHub CLI,别名gh. 现在,你就 ...