JavaSE—方法的使用

概述

  方法的意义:

    在编程中某段功能的代码可能频繁使用到,如果在每个位置都重新实现一遍,会:
        1. 使程序变得繁琐
        2. 开发效率低下,做了大量重复性的工作
        3. 不利于维护,需要改动时,所有用到该段代码的位置都需要修改
        4. 不利于复用
    因此,在编程中,我们也可以将 频繁 使用的代码封装成 " 帖子 "( 方法 ) ,需要时直接拿来链接 (即方法名--方法的入口地址) 使用即可,避免了一遍一遍的累赘。

一、什么是方法

        方法其实就是一段代码片段,与C语言中的函数十分相似,两者的相似处集中体现在:        

        1. 是能够模块化的组织代码(当代码规模比较复杂的时候).
        2. 做到代码被重复使用, 一份代码可以在多个位置使用.
        3. 让代码更好理解更简单.
        4. 直接调用现有方法开发, 不必重复造轮子.

二、方法的定义

        方法的语法格式为:

  修饰符 + 返回参数类型 + 方法名(参数类型 形参名){

[return参数];

}

eg:
        public int Add(int n,int m){
                return n+m;
        }
注意事项
1. 修饰符:现阶段直接使用 public static 固定搭配
2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成 void
3. 方法名字:采用小驼峰命名
4. 参数列表:如果方法没有参数, () 中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
5. 方法体:方法内部要执行的语句
6. java 当中,方法必须写在类当中
7. java 当中,方法不能嵌套定义
8. java 当中,没有方法声明一说

三、方法的调用过程 

方法调用过程
调用方法 --- > 传递参数 --- > 找到方法地址 --- > 执行被调方法的方法体 --- > 被调方法结束返回 --- > 回到主调方法继续往下 执行

1、实参与形参的关系

这里举一个简单的例子:
public class demo {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        swap(a, b);
        System.out.println("main: a = " + a + " b = " + b);
    }
    public static void swap(int x, int y) {
        int tmp = x;
        x = y;
        y = tmp;
        System.out.println("swap: x = " + x + " y = " + y);
    }
}

 运行结果:

     

        为何调用方法之后main方法中的a和b并没有交换?

        由上述的代码片段我们可以得知:
1、方法中的参数变量是形式参数
2、调用方法时动态处理的参数是形式参数,形式参数是实际参数的一份拷贝
3、main方法中的实际参数与其他调用方法中的形式参数没有直接联系,只是在栈中开辟了空间存放变量,不同的方法开辟不同的空间存放方法中的变量
4、方法中的形式参数有生命周期(也就是和C语言中的函数一样,未静态初始化的参数在被函数调用之后会被回收)
        main方法中的 a = 10 和 b = 20 并不是静态初始化(属于局部变量),当调用swap方法时,实际参数也是作为方法中的局部变量进行逻辑执行,在方法调用结束之后参数生命周期也就结束了( 被回收

2、没有返回值的方法

        方法是否有返回值要根据具体代码需求而定,如果没有需求那就不需要返回值,没有返回值的方法参数类型一定是void

        例如:

class Test {
    public static void main(String[] args) 
    {
        int a = 10;
        int b = 20;
        print(a, b);
    }
        public static void print(int x, int y) {
            System.out.println("x = " + x + " y = " + y);
        }
}

        这个代码块中print这个方法我们只是需要它具备一个打印的功能,并不需要方法返回参数,所以这个方法就没有返回值


3、方法的重载        

        为什么需要方法重载?何为方法重载?方法重载的具体体现?

先看代码:

public class TestMethod {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int ret = add(a, b);
        System.out.println("ret = " + ret);
        double a2 = 10.5;
        double b2 = 20.5;
        double ret2 = add(a2, b2);
        System.out.println("ret2 = " + ret2);
    }
    public static int add(int x, int y) {
    
        return x + y;
     }
    
}
// 编译出错
Test.java:13: 错误: 不兼容的类型: 从double转换到int可能会有损失
double ret2 = add(a2, b2);

        代码中add方法的功能是实现两数相加,而方法的返回值是int,当其他类型的数据也要调用add方法时会先进行类型提升,导致返回值类型发生变化,由此会出现程序报错

        因此,为了避免出现代码执行的时候出现逻辑错误,在定义方法时可以根据不同的参数需求对方法进行重载

重载

        如何对方法进行重载?

        改变形参数量,形参次序,形参类型,返回值类型

(注:多个方法进行重载方法名字一定是一样的,否则就不算是重载,而是定义了多个不同的方法)


4、方法签名

        在同一个作用域中不能定义两个相同名称的标识符。
        比如:方法中不能定义两个名字一样的变量,那为什么类中就 可以定义方法名相同的方法呢?
方法签名即:        
        经过编译器编译修改过之后方法最终的名字。
具体方式:
        方法全路径名+参数列表 + 返回值类型,构成 方法完整的名字。


四、递归

递归的概念:
        
        一个方法 在执行过程中调用自身 , 就称为 " 递归 ".
例如:
        求N!用递归的方式实现数学中阶乘这一问题,在计算的过程中需要把递归分为小步骤然后重复执行。
public class demo1 {
    public static void main(String[] args) {
         demo1 d1 = new demo1();
        System.out.println("请输入所求阶乘数字:");
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        System.out.println("所求数字的阶乘为:");
        System.out.println(d1.sub(num));
    }
    public int sum = 0;
    public int sub(int num) {
        if(num==0||num==1)
            return 1;

        return num*sub(num-1);

    }
}

        上述的代码中sub就是求阶乘的方法,计算阶乘只有两个小步骤:num*(num-1)的递归,结束递归的条件判断

        在后续的数据结构中,创建树,链表,顺序表,树的遍历、压栈进栈等等,都会频繁使用到递归。


本期博客就到此为止啦!看完觉得有收获的可以点点赞啦

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值