0


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


一、本节重点内容

  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来介绍 形参和实参的:

** 分析:**

** 在经过swap交换后,交换的只是 形参 里面的数值,而并没有交换 实参 里面的数值;按照C语言来说,要想实现交换实参里面的值,那么就需要 形参 接收的是地址;可是,Java没有 按址传递 的概念。**

** x、y是在main函数里面定义的,属于局部变量;局部变量在栈上开辟内存(一块特殊的内存空间),对于Java而言,栈上变量的地址是拿不到的。**

** 等到以后介绍到 类和对象 的内容,才可以对它进行操作(放在堆上的 都是对象,这个以后进行介绍)。**


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. 与返回值类型是否相同无关 。

第一个和第二个条件很好理解,那么 我们就来具体介绍一下 第三个条件的意思:

** 由此可见,真正影响 方法重载的 是 方法名和参数列表,而 返回值是不会影响方法的重载的。**

** 上面实例中,虽然返回值是不同的,但是 方法名和参数列表相同,所以 IDEA仍然把它当做了同一个方法,所以就报错了。**

** 所以说,返回值 一样 或者 不一样,不能考虑 能不能重载;真正决定重载的,是方法名和参数列表。**

** 简单的来说,平时用IDEA敲代码的情况,它会自动出现 一些方法重载的提示(这个会在介绍数组的时候会有大量的方法重载)。**

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);
    }
}

图示:

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

3.7.3 递归的练习习题

递归经典练习题


总结

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

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

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


本文转载自: https://blog.csdn.net/qq_53362595/article/details/123478121
版权归原作者 星海可沉鱼 所有, 如有侵权,请联系我们删除。

“【JavaSE系列】 第五话 —— 方法的使用”的评论:

还没有评论