0
点赞
收藏
分享

微信扫一扫

【JavaSE系列】 第五话 —— 方法的使用

目录

 🍚一、本节重点内容

 🧀二、思维导图

 🍜三、方法的概念和使用

       🥣🥣3.1 什么是 方法

       🍞🍞3.2 方法的定义

                🥡​​​​​​​🥡​​​​​​​🥡3.2.1 语法格式

       🍺​​​​​​​🍺3.3 方法调用的执行过程

                🧇​​​​​​​🧇​​​​​​​🧇 3.3.1 方法调用的过程

                🍖​​​​​​​🍖​​​​​​​🍖3.3.2 下面举例详细分析一下一个方法的执行过程

                 🍗​​​​​​​🍗​​​​​​​🍗3.3.3 代码示例

       🍇​​​​​​​🍇3.4 形参与实参的关系(重要)

       🥤​​​​​​​🥤3.5 有没有返回值的方法

                🧊​​​​​​​🧊​​​​​​​🧊3.5.1 代码示例

       🍿​​​​​​​🍿3.6 方法的重载

                🍟​​​​​​​🍟​​​​​​​🍟3.6.1 方法重载的概念

                🍔​​​​​​​🍔​​​​​​​🍔3.6.2 方法重载的要求

                🍕​​​​​​​🍕​​​​​​​🍕3.6.3 方法签名

       🎁​​​​​​​🎁3.7 递归

                🎵​​​​​​​🎵​​​​​​​🎵3.7.1 递归的必要条件

                ⌚​​​​​​​⌚​​​​​​​⌚ 3.7.2 递归过程的具体代码分析实例

 📝总结


​​​​​​​

一、本节重点内容

  1. 掌握 方法的定义以及使用

  2. 掌握 方法传参 ;

  3. 掌握 方法重载 ;

  4. 掌握 递归


二、思维导图


三、方法的概念和使用

3.1 什么是 方法

       简单来说,方法就是一个 代码的片段,类似于C语言里面的函数。即:把一个功能给抽象出来了,使其变成一个模块;只需要传递相应的参数,便可以调用相应的方法,便可以调用这个功能。

       那么,方法的存在具有哪些意义呢:

  1. 能够模块化的组织代码(当代码规模比较复杂的时候);

  2. 做到代码被重复使用, 一份代码可以在多个位置使用;

  3. 让代码更好理解更简单;

  4. 直接调用现有方法开发, 不必重复造轮子。


3.2 方法的定义

3.2.1 语法格式

 【说明】

  1. 在Java里面,方法中 如果有返回值类型的话,那么方法体中一定要有返回值(并且与返回值类型相对应),否则会报错:
  2. 下面来列一个简单的例子:

 【注意事项】

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

  2. 方法名字:采用小驼峰命名

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

  4. 在java当中,方法必须写在类当中;方法不能嵌套定义(各方法是同级别的,但可以嵌套调用);没有方法声明一说(即:只要方法定义在类里面即可,与 main函数 的位置无关) 。


 3.3 方法调用的执行过程

 3.3.1 方法调用的过程

【注意】

  1. 定义方法的时候,不会执行方法的代码, 只有调用的时候才会执行;

  2. 一个方法可以被多次调用。

3.3.2 下面举例详细分析一下一个方法的执行过程

【注意】Java中 从本质上来说,都是按值传递。 

 

3.3.3 代码示例

实现 1! + 2! + 3! + 4! + 5! 的代码:

第一步:我们 写出一个数的阶乘的方法:

第二步:我们 把每一个数的阶乘 给加到一起:

第三步:可以调用以上方法来实现功能:

然后编译起来看结果:

 3.4 形参与实参的关系(重要)

【说明】形参是实参的一份临时拷贝。

曾经,在C语言中 是用交换函数swap来介绍 形参和实参的:


 3.5 有没有返回值的方法

方法的放回只有两种情况:有 或者 没有。

如果有,那么 返回值的类型 与 方法中要返回的类型 一一对应;

如果没有,那么 返回值的类型 需要变成 void,同时 方法中不能含有 return 。

 

3.5.1 代码示例

 


 3.6 方法的重载

3.6.1 方法重载的概念

在Java中,如果多个方法的方法名相同,但是参数列表不同,那么 就称这几个方法重载了。

代码示例:

public class TestDemo {
    /**
     * 实现两个整数相加的
     * @param a
     * @param b
     * @return
     */
    public static int add(int a,int b){
        return a+b;
    }


    /**
     * 实现3个整数相加的
     * @param a
     * @param b
     * @param c
     * @return
     */
    public static int add(int a,int b,int c){
        return a+b+c;
    }



    /**
     * 实现3个小数相加的
     * @param a
     * @param b
     * @param c
     * @return
     */
    public static double add(double a,double b,double c){
        return a+b+c;
    }



    public static void main(String[] args) {
        System.out.println(add(1, 2));
        System.out.println(add(1, 2, 3));
        System.out.println(add(1.1, 1.2, 1.3));
    }
}

如上,三个方法就是重载的。

3.6.2 方法重载的要求

  1. 方法名必须相同;
  2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
  3. 与返回值类型是否相同无关

3.6.3 方法签名

在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量。

但是为什么在类中 可以定义 方法名相同的方法呢?

这就涉及到了 方法签名的概念,方法签名即:经过编译器编译修改过之后方法最终的名字。

具体方式为:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

代码示例:

public class TestMethod { 

       public static int add(int x, int y){

                 return x + y; 
       
       }

       public static double add(double x, double y){ 
               
                 return x + y; 
       }


      public static void main(String[] args) { 
 
                add(1,2); 
  
                add(1.5, 2.5); 
      } 

}

上述代码经过编译之后,然后使用JDK自带的javap反汇编工具查看,具体操作:

  1. 先对工程进行编译生成.class字节码文件;

  2. 在控制台中进入到要查看的.class所在的目录;

  3. 输入:javap -v 字节码。

 

 方法签名中的一些特殊符号说明:

 


3.7 递归

       在某些情况下,我们遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解了

3.7.1 递归的必要条件

  1. 自己调用自己;
  2. 有一个趋近于终止的条件(递归出口)。

 

 【注意】写递归,需要提前推导它的一个递归公式。

 3.7.2 递归过程的具体代码分析实例

代码示例:

public class TestDemo {

    public static void func(int n){
        if(n==1){
            System.out.println(n);
            return;
        }
        func(n-1);
        System.out.println(n);
    }
    
    public static void main(String[] args) {
        func(5);
    }
}

图示:

 【说明】正是由于每一次递归 都执行了一半,都要保存一下线程,这才会出现栈溢出的原因。


总结

这一话的需要知道的内容就这么多了,

下一篇博客打算分享一些递归的练习题,用来巩固一下所学的知识,同时也会“装备”到这篇博客上去;

当然啦如果铁铁们可以一键三连那就更棒了,特别特别感谢 ୧(๑•̀⌄•́๑)૭ 。

 

 

举报

相关推荐

0 条评论