Java方法

1. 概述

  • 具有某种特定功能的代码段。

  • 某段代码经常使用,所以用大括号,将这段代码包起来,起个名字。以后就使用这个名字来代替这段代码

  • 特点:

    • 提高了代码的复用性。

    • 提高了代码的封装性,大括号中的内容,其他调用者看不到也无法直接访问。

    • 简化了软件设计的思维难度

2. 方法的定义和调用

2.1 方法的定义

  • 语法结构:

  • 访问修饰符 可选修饰符 返回值类型 方法名称(形式参数列表) {
        方法体代码块; 
        return  ;
    }

  • 语法解释:

    • 访问修饰符:后面讲,暂时不写,或者写成public

    • 可选修饰符:后面讲,暂时写成static. 静态.

    • 返回值 的功能,有可能会有一些产出,就需要将数据返回给调用者。调用者需要知道生产出来的数据的数据类型。方法中必须要return 一个满足要求的类型数据。如果该方法只处理逻辑,没有产出,那么该位置可以直接写void,方法内可以不写return,如果要写,return后面不要跟任何数据类型,表示结束方法。

    • 方法名称:给这段代码起的名字,只要是一个合法的标识符即可。遵守小驼峰的命名规则

    • 形式参数列表:这段代码要完成功能,可能会需要一些资源。在参数列表中,需要定义一些变量, 在调用本方法的时候,会由外界传入数据。

      格式:数据类型1 形参1,数据类型2 形参2

    • 方法体代码块:真正要完成该方法功能的执行逻辑

    • return语句使用

      • 最终生产出来的结果,要返回给调用者,使用return语句返回

      • 结束方法,注意return语句后面不再书写代码

  • 示例:

  • /**
    * 打印一个0~9的随机整数
    */
    import java.util.Random;
    static void printRandomNumber() {
            Random random = new Random();
            int number = random.nextInt(10);
            System.out.println(number);
        }

  • 注意:

    • 方法不能嵌套定义,方法都是类里面定义的

    • 方法中可以调用当前的属性(成员变量)或者方法

    • 方法的定义是平级关系

    • 方法可以嵌套调用,C调用B,B调用A,甚至可以自己调用自己(递归)

2.2 方法的调用

语法结构:

方法名(实际参数);

  • 调用特点:方法不调用,就不执行。

  • 参数传递必须匹配。

  • 示例:

  • import java.util.Random;
    
    public class MethodTest {
        public static void main(String[] args) {
            // 调用方法
            printRandomNumber();
        }
    
        static void printRandomNumber() {
            Random random = new Random();
            int number = random.nextInt(10);
            System.out.println(number);
        }
    }
    

3. 返回值.

  • return语句表达方法结束了;表示方法的产出内容。

  • 如果方法没有具体的返回内容,可以写成return;此时的return语句可以省略,返回值类型必须写成void。

  • 如果方法有具体的返回内容,那么return后面就需要加上返回的那个数据。返回值类型必须和 return语句后面的数据的数据类型一致。

  • return语句返回数据,返回给调用者。谁来调用当前方法,当前方法就将数据返回给谁。

  • import java.util.Random;
    public class MethodTest {
        public static void main(String[] args) {
            int re = printRandomNumber();
            System.out.println(re);
        }
    
        static int printRandomNumber() {
            Random random = new Random();
            int number = random.nextInt(10);
            return number;
        }
    }

3.1 带返回值方法的定义和调用

  • 方法的返回值类型,既可以是基本数据类型,也可以是引用数据类型

  • 如果方法的返回值类型是引用数据类型,那么在return语句中,一定要返回该类型的一个对象。

  • 示例:

  • import java.util.Arrays;
    import java.util.Random;
    
    public class MethodTest {
        public static void main(String[] args) {
            int maxValue = maxInArray();
            System.out.println(maxValue);
            int[] randomArray = getRandomArray();
            System.out.println(Arrays.toString(randomArray));
        }
    
        // 获取数组中的最大值
        static int maxInArray() {
            int[] arr = {1, 6, 3, 9, 10};
            int max = arr[0];
            for (int a : arr) {
                if (a > max) {
                    max = a;
                }
            }
            return max;
        }
    
        // 获取指定元素个数、指定范围的随机数组  10个元素  范围0 -10
        static int[] getRandomArray() {
            int size = 10;
            int bound = 10;
            Random random = new Random();
            int[] arr = new int[size];
            for (int i = 0; i < size; i++) {
                arr[i] = random.nextInt(bound);
            }
            return arr;
        }
    }

4 参数

4.1 带参数方法的定义和调用

  • 形参和实参

    • 形式参数:在定义方法时使用,需要加上数据类型,也就是对于变量进行声明。各个变量之间,使用逗号分隔。

    • 实际参数:在方法调用时使用,不需要加上数据类型,也就是对于变量进行赋值。各个实际参数之间,也使用逗号分隔。顺序必须和定义的方法的形式参数的顺序一致。

  • 方法的参数既可以是基本数据类型,也可以是引用数据类型(类、接口、枚举、数组)

  • 示例:

  • import java.util.Arrays;
    import java.util.Random;
    
    public class MethodTest {
        public static void main(String[] args) {
            int[] arr = new int[]{10, 2, 30, 46, 5, 6};
            System.out.println(maxInArray(arr));
            int[] randomArray = getRandomArray(10, 10);
            System.out.println(Arrays.toString(randomArray));
    
        }
    
        // 获取数组中的最大值
        static int maxInArray(int[] arr) {
            int max = arr[0];
            for (int a : arr) {
                if (a > max) {
                    max = a;
                }
            }
            return max;
        }
    
        // 获取指定元素个数、指定范围的随机数组
        static int[] getRandomArray(int size, int bound) {
            Random random = new Random();
            int[] arr = new int[size];
            for (int i = 0; i < size; i++) {
                arr[i] = random.nextInt(bound);
            }
            return arr;
        }
    }

4.2 参数传递基本数据类型

  • 示例:

  • public class DemoTest {
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
            swap(a, b);
            System.out.println("main中的a是" + a);
            System.out.println("main中的b是" + b);
        }
    
      static void swap(int a, int b) {
            int temp = a;
            a = b;
            b = temp;
            System.out.println("swap方法中的a是:" + a);
            System.out.println("swap方法中的a是:" + b);
        }
    }

  • 注意:传递基本数据类型时,实参与形参之间为值传递,因此方法内的形参变量与调用方的实参变量无关。

4.3 参数传递引用数据类型

  • 当方法的形式参数是引用数据类型时,其实传递的是一个对象的内存地址,在方法的内部可以通过这个内存地址,访问方法外创建的对象。

  • 示例:

  • import java.util.Arrays;
    
    public class DemoTest {
        public static void main(String[] args) {
            int[] arr = new int[]{100, 33, 4, 55, 6, 7};
            swap(arr);
            System.out.println(Arrays.toString(arr));
        }
    
       static void swap(int[] arr) {
            Arrays.sort(arr);
        }
    }

5. 方法重载

  • 重载:overload

  • 方法的重载:在同一个类中,方法名相同,参数列表不同

  • 方法的重载与返回值类型、访问修饰符无关。

  • 注意事项:

    • 是在同一个类中。方法名不相同的方法中,不可能发生方法的重载的。

    • 方法名称相同:一模一样。

    • 参数列表不同:参数类型不同;参数个数不同;参数类型的顺序不同。

    • 与返回值类型无关。方法是否是重载,与返回值类型没有关系。

    • 如果方法的名称和参数列表都一样,即使返回值类型不同,也不算重载,属于方法的重复定义。

  • 记忆口诀

    • 两同一不同:同一个类,同一个方法名,参数不同(参数列表不同、参数个数不同、参数类型不同)

  • 重载优点:

    • 没有重载的时候,相同逻辑相同功能的代码,需要定义很多个方法名称。调用者在记忆方法名称的时候,就有很大的负担。

    • 有重载之后,相同功能逻辑的方法,只需要记忆一个名字。

    • 当前学习过的常见重载:

      • println方法,任意类型的数据,都可以放到这个方法中打印。在System.out类型中,将各种数据类型的打印方法,都定义出来了,都起了println方法的名称。

示例:求和

public class ParamsTest {
    public static void main(String[] args) {
        sum(1, 2);
        sum(1, 2, 3);
        sum(1, 2, 3, 5, 4, 7, 8);
    }

    static void sum(int a, int b) {
        int sum = a + b;
        System.out.println(sum);
    }

    static void sum(int a, int b, int c) {
        int sum = a + b + c;
        System.out.println(sum);
    }
		// 可变个数形参
    static void sum(int... n) {
        int sum = 0;
        for (int i : n) {
            sum += i;
        }
        System.out.println(sum);
    }
}

  • 编写程序,定义三个重载方法并调用。方法名为mOL。

  • 三个方法分别接收一个int参数、两个int参数、一个字符串参数。
    分别执行平方运算并输出结果,相乘并输出结果,输出字符串信息。
    在主类的main ()方法中分别用参数区别调用三个方法。

5.1可变个数形参(语法糖)

  • 可变个数形参(语法糖),本质为数组,必须放在参数列表的最后一位。

  • /* 可变个数形参的方法
     * 
     * 1.jdk 5.0新增的内容
     * 2.具体使用:
     *   2.1 可变个数形参的格式:数据类型 ... 变量名
     *   2.2 当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个,。。。
     *   2.3 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
     *   2.4 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。
     *   2.5 可变个数形参在方法的形参中,必须声明在末尾
     * 	 2.6 可变个数形参在方法的形参中,最多只能声明一个可变形参。
     * 
     */
        2.4 综合上方案例:
       static void sum(int[] arr) {
    			//不允许共存
        }
    
        static void sum(String[] arr) {
    		// 允许重载
        }
        2.5
        static void sum(int a, int b, int... n) {
         // 允许
        }  
        static void sum(int... n, int a, int b) {
    		 // 不允许
        }
        static void sum(String... m, int... n) {
    		// 不允许
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Gao_xu_sheng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值