方法

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

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

方法的声明格式

修饰符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. systemverilog动态数组

  2. 重新整理 .net core 实践篇—————配置系统之简单配置中心[十一]

    前言 市面上已经有很多配置中心集成工具了,故此不会去实践某个框架. 下面链接是apollo 官网的教程,实在太详细了,本文介绍一下扩展数据源,和简单翻翻阅一下apollo 关键部分. apollo 服 ...

  3. 书列荐书 |《黑天鹅·如何应对不可预知的未来》【美】纳西姆 尼古拉斯 塔勒布 著

    你不知道的事比你知道的事更有意义,因为生活中发生了许多微小的事情,尽管出现的概率非常小,但是却以某一种巨大的力量影响我们的生活.但是由于思维习惯的问题,导致我们看问题的方式使得我们不能很快地把握事物的 ...

  4. 智能物联网(AIoT,2020年)(上)

    智能物联网(AIoT,2020年)(上) 中国AloT的概念与现状 01智能物联网(AIoT)定义 人工智能与物联网的协同应用 02 AIoT2025产业瞭望:家庭AI管家 智能家居交互方式无感化,跨 ...

  5. NVIDIA A100 GPUs上硬件JPEG解码器和NVIDIA nvJPEG库

    NVIDIA A100 GPUs上硬件JPEG解码器和NVIDIA nvJPEG库 Leveraging the Hardware JPEG Decoder and NVIDIA nvJPEG Lib ...

  6. 编译原理-翻译程序(Translator)

    分为编译程序(compiler)和解释程序(interpreter) 编译程序:把源程序(高级语言编写)转换成目标程序(汇编语言或机器语言编写). 解释程序:对源程序边翻译边执行. 编译型语言 优点: ...

  7. 在spring配置文件中引入外部properties配置文件 context:property-placeholder

    在spring的配置文件中,有时我们需要注入很多属性值,这些属性全都写在spring的配置文件中的话,后期管理起来会非常麻烦.所以我们可以把某一类的属性抽取到一个外部配置文件中,使用时通用spring ...

  8. XML文件存在中文注释报错问题( 3 字节的 UTF-8 序列的字节 3 无效)

    今天在做mybatis项目的时候,给映射文件添加了中文注释后,程序就报错.把中文注释删除后,程序又可以正常执行.解决方法在下文提到. 我的xml映射文件如下: <?xml version=&qu ...

  9. 二、创建测试JSP页面

    root@web1 ~]# rm -rf /usr/local/tomcat/webapps/ROOT/* 1.创建测试网页 [root@web1 ROOT]# vim /usr/local/tomc ...

  10. robotframework常用关键字

    robotframework关键字 可以将关键字看作是处理数据的方法.robotframework的关键字和测试数据组成了测试用例. robotframework关键字包括系统关键字和用户关键字.用户 ...