Java基础(方法)

🎉🎉🎉哈喽!!!大家好,这里是我不是小明同学

🎆欢迎各位小伙伴关注➕点赞➕留言➕收藏

🎆我坚信努力奔跑才能与幸运不期而遇。

🎆🎉🎉🎉作者知识水平有限,若有什么错误或者需改进之处希望大家指出,若是你有更好的代码希望能给博主留言,博主希望能在CSDN与各位一起进步。

目录

1.方法

1.1什么是方法

1.2方法的定义

1.3实参和形参的关系

1.4无返回值的方法

2.方法重载

2.1为什么需要方法重载

2.2方法重载概念

3.递归

3.1递归的概念

3.2 递归执行过程分析


1.方法

1.1什么是方法

方法就是一个代码片段 . 类似于 C 语言中的 " 函数 " 。方法存在的意义 ( 不要背 , 重在体会 ):
1. 是能够模块化的组织代码 ( 当代码规模比较复杂的时候 )。
2. 做到代码被重复使用 , 一份代码可以在多个位置使用。
3. 让代码更好理解更简单。
4. 直接调用现有方法开发 , 不必重复造轮子。

1.2方法的定义

方法语法格式
// 方法定义 
修饰符 返回值类型 方法名称([参数类型 形参 ...])
{ 
    方法体代码; 
    [return 返回值];
}

例:实现一个函数,判断一个年份是否位闰年。

public static int func(int y) {
        //是闰年返回1,不是闰年返回0
        if(y%4==0 && y%100!=0 || y%400==0) {
            return 1;
        }
        else {
            return 0;
        }
    }

注意:

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

🚨方法名称:建议使用小驼峰命名法

🚨参数列表:若方法没有参数,()中什么都不写,若有参数,需要指定参数类型,多个参数之间使用逗号隔开

🚨在 Java 中,方法必须写在类当中;方法不能嵌套定义;没有方法声明

1.3实参和形参的关系

方法中的形参相当于数学函数中的自变量,比如:1+2+3+...+ n的公式为 sum(n)=(1/2)(1+n)n;

方法的形参就相当于 sum 函数中的自变量n,用来接收 sum 函数在调用时传递的值,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。

public static int getSum(int N) { // N是形参 
    return (1+N)*N / 2; 
}

getSum(10); // 10是实参,在方法调用时,形参N用来保存10 
getSum(100); // 100是实参,在方法调用时,形参N用来保存100

🚨注意:实参的值永远是拷贝到形参中,形参和实参本质是两个实体

交换两个整型变量代码示例:

public class TestMethod {
    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);
    }
}
// 运行结果 
// swap: x = 20 y = 10
// main: a = 10 b = 20
可以看到,在 swap 函数交换之后,形参 x y 的值发生了改变,但是 main 方法中 a b还是交换之前的值,即没有交 换成功。
分析:
实参 a b main 方法中的两个变量,其空间在 main 方法的栈 ( 一块特殊的内存空间 ) 中,而形参 x y swap 方法中 的两个变量,x y 的空间在 swap 方法运行时的栈中,因此:实参 a b 与 形参 x y 是两个没有任何关联性的变量, swap 方法调用时,只是将实参 a b 中的值拷贝了一份传递给了形参 x y ,因此对形参 x y 操作不会对实参 a b
产生任何影响。
🚨注意: 对于基础类型来说, 形参相当于实参的拷贝. 即 传值调用

1.4无返回值的方法

方法的返回值是可选的,有些时候可以没有的,没有返回值时返回值类型必须写成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);
     } 
}

2.方法重载

2.1为什么需要方法重载

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 方法

2.2方法重载概念

在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。

public class TestMethod {
    public static void main(String[] args) {
        add(1, 2);// 调用add(int, int)
        add(1.5, 2.5);// 调用add(double, double)
        add(1.5, 2.5, 3.5);// 调用add(double, double, double) }
    }
    public static int add(int x, int y) {
        return x + y;
    }
    public static double add(double x, double y) {
        return x + y;
    }
    public static double add(double x, double y, double z) {
        return x + y + z;
    }
}

注意:

🚨方法名必须相同

🚨参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)

🚨与返回值类型是否相同无关,两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的

3.递归

3.1递归的概念

一个方法在执行过程中调用自身 , 就称为 " 递归 ".
递归相当于数学上的 " 数学归纳法 ", 有一个起始条件 , 然后有一个递推公式
例如 , 我们求 N!
起始条件 : N = 1 的时候 , N! 1. 这个起始条件相当于递归的结束条件 .
递归公式 : N! , 直接不好求 , 可以把问题转换成 N! => N * (N-1)!
递归的必要条件:
1. 将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同
2. 递归出口
递归求N的阶乘代码示例:
public static void main(String[] args) { 
    int n = 5; 
    int ret = factor(n); 
    System.out.println("ret = " + ret); 
}
    public static int factor(int n) { 
        if (n == 1) { 
            return 1;
        }
        return n * factor(n - 1)// factor 调用函数自身
    }
// 执行结果 ret = 120

3.2 递归执行过程分析

递归的程序的执行过程不太容易理解, 要想理解清楚递归, 必须先理解清楚 "方法的执行过程", 尤其是 "方法执行结束 之后, 回到调用位置继续往下执行".

递归求 N 的阶乘代码示例:

public static void main(String[] args) {
        int n = 5;
        int ret = factor(n);
        System.out.println("ret = " + ret);
    }
    public static int factor(int n) {
        System.out.println("函数开始, n = " + n);
        if (n == 1) {
            System.out.println("函数结束, n = 1 ret = 1");
            return 1;
        }
        int ret = n * factor(n - 1);
        System.out.println("函数结束, n = " + n + " ret = " + ret);
        return ret;
    }
        // 执行结果
        函数开始, n = 5
        函数开始, n = 4
        函数开始, n = 3
        函数开始, n = 2
        函数开始, n = 1
        函数结束, n = 1 ret = 1
        函数结束, n = 2 ret = 2
        函数结束, n = 3 ret = 6
        函数结束, n = 4 ret = 24
        函数结束, n = 5 ret = 120
        ret = 120
    }

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 44
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值