【Java基础】方法


个人简介

> 📦个人主页:轻狂客_零度的主页
> 🏆学习方向:JAVA后端开发 
> 📣种一棵树最好的时间是十年前,其次是现在!
> ⏰往期文章:【Java基础】数组
> 🧡喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。

前言

方法是什么

方法是一种语法结构,它可以把一段代码封装成一个功能,以方便重复调用

使用方法的好处是

1. 提高了代码的复用性

2. 让程序的逻辑更清晰

活动地址:CSDN21天学习挑战赛

目录

前言

1. 方法定义, 调用

​编辑2. 方法使用的常见问题

方法常见问题

3. 方法案例

简易计算器的实现

4. 方法调用的内存图

5. 方法的参数传递机制

5.1 基本类型的参数传递

5.2 引用类型的参数传递

6. 方法重载

7.方法重写

8.四种权限修饰符

9.练习: 方法调用的顺序

10.补充知识: 单独使用return关键字

11.拓展 : 方法的递归


1. 方法定义, 调用

 1.1 方法的完整格式

  修饰符 返回值类型 方法名(参数列表){ 方法体 }

 1.2 如何确定我们要调用哪个方法呢?

  方法名+参数列表

  1.3 一个方法被调用,就会执行这个方法的功能,执行完毕就返回到方法被调用的位置,在第几行调        用,程序就返回到第几行继续向下执行
  如果这个方法有返回值,我们有两种选择:
  1). 选择只执行功能,不接收返回值,不再继续使用这个方法的结果
  2). 选择在方法调用的位置接收这个方法的返回值,接收到的返回值可以在方法外继续使用

2. 方法使用的常见问题

方法常见问题

1. 方法的编写顺序无所谓。

2. 方法与方法之间是平级关系,不能嵌套定义。

3. 方法的返回值类型为void(无返回值),方法内则不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。

4. return语句下面,不能编写代码,因为永远执行不到,属于无效的代码。

5. 方法不调用就不执行, 调用时必须严格匹配方法的参数情况。

6. 有返回值的方法调用时可以选择定义变量接收结果,或者直接输出调用,甚至直接调用;无返回值方法的调用只能直接调用。

3. 方法案例

简易计算器的实现

package com.example.review;

import java.util.Scanner;

/*本类用于实现简易计算器*/
public class TestCalc {
    public static void main(String[] args) {
        f0();//调用一个实现计算器的方法
    }

    private static void f0() {
        while(true){//死循环,让用户可以一直算
            //1.提示并接收用户输入的两个数
            System.out.println("请您输入要计算的第1个数:");
            int a = new Scanner(System.in).nextInt();
            System.out.println("请您输入要计算的第2个数:");
            int b = new Scanner(System.in).nextInt();

            //2.提示并接收用户输入的运算符
            System.out.println("请您输入要计算的运算符,支持:+ - * / :");
            String s = new Scanner(System.in).nextLine();
            //3.根据运算符的不同,调用不同的计算方法进行计算并输出结果
            switch(s){
                case "+" : f1(a,b);break;
                case "-" : f2(a,b);break;
                case "*" : f3(a,b);break;
                case "/" : f4(a,b);break;
                default: System.out.println("您输入的运算符不正确!");
            }
            //4.询问用户是否想继续运算
            System.out.println("如果想退出,请输入1,继续请输入2");
            int flag = new Scanner(System.in).nextInt();
            if(flag == 1){break;}
        }
    }

    private static void f4(int a, int b) {//将拿到的两个数a和b做除法运算并打印结果
        System.out.println(a+"和"+b+"做除法的结果为:"+(a/b));
    }
    private static void f3(int a, int b) {//将拿到的两个数a和b做乘法运算并打印结果
        System.out.println(a+"和"+b+"做乘法的结果为:"+(a*b));
    }
    private static void f2(int a, int b) {//将拿到的两个数a和b做减法运算并打印结果
        System.out.println(a+"和"+b+"做减法的结果为:"+(a-b));
    }
    private static void f1(int a, int b) {//将拿到的两个数a和b做加法运算并打印结果
        System.out.println(a+"和"+b+"做加法的结果为:"+(a+b));
    }
}

4. 方法调用的内存图

 方法没有被调用的时候,在方法区中的字节码文件中存放

 方法被调用的时候,需要进入到栈内存中运行

方法的运行区域在哪里?

栈内存 

5. 方法的参数传递机制

5.1 基本类型的参数传递

如果方法的参数类型是基本类型,传入的是实际的字面值,如果是引用类型,传入的是地址值

 形参:形式意义上的参数,比如方法参数列表的参数名,光看参数名是无法确定这个变量的值是多少的
 实参:实际意义上的参数,比如我们的局部变量,比如成员变量,比如调用方法时传入的数字

5.2 引用类型的参数传递

基本类型和引用类型的参数在传递的时候有什么不同?

1). 都是值传递。

2). 基本类型的参数传输存储的数据值。

3). 引用类型的参数传输存储的地址值。

6. 方法重载

  1. 我们根据方法名+参数列表确定具体调用哪个方法
  2. 方法的重载:在同一个类中,存在方法名相同,但参数列表不同的方法
  3. 如果在同类中,同名方法的参数个数不同,一定构成重载
  4. 如果在同类中,同名方法的参数个数相同,需要查看对应位置上参数的类型,而不是参数名,与参数名无关

比如:
(int a,String b)与(int b,String a)–不构成重载
(int a,String b)与(String a,int b)–构成重载

方法重载的作用 ?

可读性好,方法名称相同提示是同一类型的功能,通过形参不同实现功能差异化的选择,这是一种专业的代码设计。
使用方法重载的好处 ?
对于相似功能的业务场景:可读性好,方法名称相同提示是同一类型的功能,通过
形参不同实现功能差异化的选择,这是一种专业的代码设计。

7.方法重写

子类继承了父类以后,想要在不改变父类代码的情况下,实现功能的修改与拓展
重写遵循的规则: 两同 两小 一大
一大: 子类方法的修饰符权限 >= 父类方法的修饰符权限
两同: 方法名与参数列表与父类方法保持一致
两小: 子类方法的返回值类型 <= 父类方法的返回值类型,注意:这里的<=说的是继承关系,不是值的大小
子类方法抛出的异常类型 <= 父类方法抛出的异常类型

8.四种权限修饰符

权限修饰符速查表
修饰符同类同包子类不同包(无关类)
publicYESYESYESYES
protectedYESYESYESNO
默认YESYESNONO
privateYESNONONO

9.练习: 方法调用的顺序

package com.example.basic;
/*本类用于测试方法的调用*/
public class MethodDemo {
    //1.创建程序的入口函数main()
    public static void main(String[] args) {
        System.out.println("main() start...");
        m1();
        System.out.println("main() stop...");
        int a =5;
        System.out.println(a);
    }

    //2.创建m1()
    private static void m1() {
        System.out.println("m1() start...");
        m2();
        System.out.println("m1() stop...");
    }
    private static void m2() {
        System.out.println("m2() start...");
    }
}

10.补充知识: 单独使用return关键字

  如果要直接结束当前方法的执行,怎么解决?

  1). return; 跳出并立即结束所在方法的执行。

  2). break; 跳出并结束当前所在循环的执行。

  3). continue; 结束当前所在循环的当次继续,进入下一次执行。

11.拓展 : 方法的递归

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 32
    评论
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是Lay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值