Java复习笔记-07

方法

1 方法的概述

将特定功能的代码使用代码块放在一起,并且具有自己的名字。可以重复利用的代码,就是方法。

2 方法的格式

  • 方法就是完成特定功能的代码块
    • 在很多语言里面都有函数的定义
    • 函数在java中就称之为方法
  • 格式
修饰符  返回值类型  方法名(参数类型 参数名1,参数类型 参数名2...){
	方法体;
	return 返回值;
}
  • 格式解释
    • 修饰符:目前先记住就是 public static
    • 返回值类型:就是确定最终return的返回值的数据类型
    • 方法名:如果只有一个单词,那么就小写,如果有多个,第一个单词小写,其他单词首字母大写
    • 参数列表: 参数的数据类型 参数1… 多个参数中间有,隔开
    • 方法体:就是重复利用的特定功能代码
    • return :是一个关键字 会立即结束当前方法,并且会将返回值返回到方法外面。

注意:方法不能嵌套

注意:方法定义在其他方法的上面或者下面是无所谓的,不会影响方法的执行顺序。

3 方法的调用

方法如果没有被调用,方法中的代码是不会执行的。

方法调用的格式:

方法名(参数);

哪一行调用方法,方法的返回值就返回到哪一行

  • 定义方法,比较两个数字是否相等
    // 比较两个数字是否相等  相等时返回true,不相等时返回false
    public static boolean compare(int x,int y){
//        if (x == y){
//            return true;
//        }else {
//            return false;
//        }
        return x == y;
    }
  • 定义方法,获取三个数字的最大值
// 定义一个方法,获取三个数字的最大值
    public static int getMax(int a,int b,int c){
        int max1 = (a > b) ? a : b;
        return (max1 > c) ? max1 : c;
    }

4 void修饰的方法

void代表方法不需要返回值。

格式:

修饰符 void 方法名(参数列表){
    方法体;
    return;
}
  • 在控制台输出所有的水仙花数
// 定义一个方法,把所有的水仙花数打印在控制台上
    public static void flowers(){
        for (int i = 100;i < 1000;i++){
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai =i / 100 % 10;
            if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
                System.out.println("水仙花数是" + i);
            }
        }
    }

5 方法的重载

在一个java类中,允许方法有相同的名称,但是参数列表需要不一致。

参数列表不一致:

  • 参数的个数不一样
  • 参数的类型不一样
  • 多个参数的情况下,参数的数据类型顺序不一样

本质上只要在调用方法时能够区分开方法,就可以重载。

方法的重载和修饰符以及返回值类型无关。

6 方法参数传递的问题

  • 形式参数(形参):在方法定义时,在小括号内的参数。
    • public static void sum(int a,int b){}
  • 实际参数(实参):在方法调用时,传入小括号中的参数。
    • sum(10,20);

注意:

  • 对于基本数据类型和String,形式参数的改变不会影响实际参数。
public class TestDemo5 {
    public static void main(String[] args) {
//        对于基本数据类型和String,形式参数的改变不会影响实际参数。

        int a = 10;
        int b = 20;
        System.out.println(a);//10
        System.out.println(b);//20

        change(a,b);


        System.out.println(a);//10
        System.out.println(b);//20

    }


    public static void change(int x,int y){
        x *= 10;
        y *= 10;
        System.out.println("x = " + x);//100
        System.out.println("y = " + y);//200
    }
}

在这里插入图片描述

  • 对于引用数据类型(不包含String),形式参数的改变会影响实际参数。
    public static void main(String[] args) {
//        对于引用数据类型(不包含String),形式参数的改变会影响实际参数
        int[] array = {10,20,30};
        System.out.println(array[0]);//10
        System.out.println(array[1]);//20
        System.out.println(array[2]);//30


        change(array);

        System.out.println(array[0]);//100
        System.out.println(array[1]);//200
        System.out.println(array[2]);//300
    }

    public static void change(int[] array){
        array[0] *= 10;
        array[1] *= 10;
        array[2] *= 10;
        System.out.println(array[0]);//100
        System.out.println(array[1]);//200
        System.out.println(array[2]);//300
    }

在这里插入图片描述

7 方法的递归

在本方法执行的使用调用自身方法

  • 定义方法,求1到传入数字的和
/**
     * sum(10) = 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2  + 1
     * sum(10) = 10 + sum(9)
     * sum(10) = 10 + 9 + sum(8)
     * ...
     * sum(10) = 10 +9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1
     */
    public static int sum(int num){
        // sum(num) = num + sum(num - 1)
        if (num == 1){
            return 1;
        }
        return num + sum(num - 1);
    }

使用递归一定要记得留递归的出口,否则会出现StackOverflowError 栈溢出错误

8 练习

  • 汉诺塔问题

有三个金刚石塔。第一个塔上面从小到大摆放着64个黄金圆盘。现在把圆盘按大小顺序重新放到另一个塔上。并且规定,在小圆盘上不能放大圆盘。在三个塔之间一次只能移动一个圆盘。

要求将64个黄金圆盘最理想的移动轨迹打印在控制台上。

/**
     * 定义一个方法,实现汉诺塔移动问题
     * @param n   代表的是盘子的数量
     * @param A   代表需要移动盘子的柱子
     * @param B   代表中间辅助的柱子
     * @param C   代表需要将盘子移动到的柱子
     */
    public static void hanio(int n,char A,char B,char C){
        if (n == 1){
            System.out.println(A + "-->" + C);
        }else {
            hanio(n - 1, A, C, B);
            System.out.println(A + "-->" + C);
            hanio(n - 1, B, A, C);
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值