day05——方法

一、方法的介绍

方法(method)是一些代码打包起来,然后可以在需要的地方重复使用。

方法是程序中最小的执行单元。

方法只有在被调用时才会执行。

方法的好处:提高代码的复用性、提高代码的可维护性。

二、方法的定义和调用

方法定义后并不是直接运行的,需要手动使用才能执行,该过程称为方法调用。

2.1 基本方法

基本方法的定义格式:

定义:
    public static void 方法名(){
        方法体;
    }
调用:
    方法名();
/*
方法练习:
    定义一个方法,打印整数10+20的和
*/
public class Demo {
    public static void main(String[] args) {
        //调用
        add();
    }
    //
    public static void add(){
        //定义两个变量
        int a = 10;
        int b = 20;
        //求和
        int sum = a + b;
        System.out.println("sum=" + sum);
    }
}

2.2 带参数的方法

带参数的方法的定义格式:

定义:
    public static void 方法名(类型1 参数名1, 类型2 参数名2,......){//形参
        方法体(Java代码);
    }
调用:
      方法名(数据1,数据2,......);//实参
public class Demo{
    public static void main(String[] args) {
        add(10,20);
        add(10,30);
    }
    //求和的方法:计算两个数字的和
    //参数:int num1, int num2
    public static void add(int num1, int num2) {
        int result = num1 + num2;
        System.out.println(result);
    }
}

形参:形式参数,方法中定义的参数。例如:int num1, int num2

实参:实际参数,实际传入的参数。例如:add(10,20);中的10和20

2.3带返回值的方法

方法的返回值其实就是方法运行的最终结果。

当我们调用一个方法时,如果方法的执行结果会在后续程序中用到,那么就需要这个方法将运行的结果返回。

带返回值方法的定义:

带返回值的方法
   定义:
      public static 返回值的类型 方法名(形参列表){
           方法体;
           return 结果;
      }
   调用:
      类型 变量名 = 方法名(实参列表);
public class Demo{
    public static void main(String[] args) {
        //调用方法获取10和20的和与平均值,并在main方法中打印
        int sum= add(10, 20);
        int avg = add(10, 20)/2;
        System.out.println("和为:" + sum);
        System.out.println("平均值为:" + avg);
    }
    //定义方法求和
    public static int add(int num1, int num2){
        int result = num1 + num2;
        return result;
    }
}

2.4方法总结

  1. 方法不调用就不执行。

  2. 方法调用时,实参必须跟形参匹配;返回值必须跟return结果匹配。

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

  4. 方法的执行顺序和编写顺序无关,但和调用顺序有关。

  5. 方法的返回值类型为void,表示该方法没有返回值,可以省略return不写。

  6. 在void方法中可单独书写return,表示结束方法,return后不能跟任何内容。

  7. return语句下方,不能编写代码,因为return表示返回结果,方法结束。

三、方法的案例

3.1 计算1~n的和

需求:计算1~n的和

分析:

  1. 方法是否需要接收数据进行处理? 需要接收n具体的值,因此形参声明为:int n

  2. 方法是否需要返回数据? 需要返回1~n的求和结果,因此返回值类型声明为int

  3. 方法内部的具体实现:完成求1-n的和并返回。

public class Demo1 {
    public static void main(String[] args) {
        int sum = getSum(100);
        System.out.println("1~100的和为:" + sum);
    }
    public static int getSum(int n){
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += i;
        }
        return sum;
    }
}

3.2 判断奇偶

需求:判断一个整数是奇数还是偶数,并把判断的结果在方法内输出出来

分析:

  1. 方法是否需要接收数据进行处理? 需要接收一个整型来判断,因此形参声明为:int num

  2. 方法是否需要返回数据? 方法内部判断完后直接输出结果即可,无需返回,因此返回值类型声明为void

  3. 方法内部的业务:通过if语句判断num是奇数还是偶数,并输出结果。

public class Demo2 {
    public static void main(String[] args) {
        Judge(90);
    }
    public static void Judge(int num){
        if(num % 2 == 0){
            System.out.println(num + "是偶数");
        }else {
            System.out.println(num + "是奇数");
        }
    }
}

3.3 比较两个int类型的数组是否一样

需求:如果两个int类型的数组,元素个数,对应位置的元素内容都是一样的则认为这2个数组是一模一样的

分析:

  1. 方法是否需要接收数据进行处理? 需要接收两个int类型的数组,因此,形参声明为:int[] arr1, int[] arr2

  2. 方法是否需要返回数据? 方法判断完后需要返回:true、false,因此,返回值类型声明为boolean类型

  3. 方法内部的业务:判断两个数组内容是否一样。

public class Demo4 {
    public static void main(String[] args) {
        int[] arr1 = {1,2,4};
        int[] arr2 = {1,2,3};
        boolean result = Judge(arr1, arr2);
        System.out.println(result);
    }
    public static boolean Judge(int[] a,int[] b){
        //比较两个数组的长度,如果长度不一致,返回false,程序退出
        if(a.length != b.length){
            return false;
        }else {//长度一致
            //利用循环,获取数组的索引和数据,将相同索引位置的数据进行比较
            for (int i = 0; i < a.length; i++) {
                if(a[i] != b[i]){//相同索引位置的数据不等,返回false
                    return false;
                }
            }
             return true;
        }
    }
}

四、方法的重载

在同一个类中,出现了名称相同,但形参列表不同的多个方法,这些方法构成了重载关系。

  • 同名不同参,与返回值无关。

  • 形参列表不同,主要包括三个维度:类型、数量、顺序(前提条件:方法多个参数,参数类型不相同)。

  • 调用方法的时候,Java虚拟机会通过参数的不同区分同名的方法。

/*
重载案例:
    使用方法重载的思想,设计比较两个整数是否相同的方法,名为compare,
    兼容全整数类型(byte,short,int,long)
*/
public class Demo2 {
    public static void main(String[] args) {
        System.out.println(compare(10,50));
    }
    public static boolean compare(byte a, byte b){
​
        return a == b;
    }
    public static boolean compare(short a, short b){
​
        return a == b;
    }
    public static boolean compare(int a, int b){
​
        return a == b;
    }
    public static boolean compare(long a, long b){
​
        return a == b;
    }
}

五、方法的执行原理

5.1 方法的执行原理

方法被调用的时候,是进入栈内存中运行。

栈特点:先进后出。

5.2 参数传递

Java的参数传递机制都是:值传递

值传递:指的是在传输实参给方法的形参的时候,传输的是实参变量中存储的值的副本。

实参:全称实际参数,是指方法调用中的参数

形参:全称形式参数,是指方法定义中的参数, 作用是接收实参中的数据

1、**基本类型参数传递的是实参的副本(保存在变量中的值**,实参与实参副本(新的数据)是两块内存的东西)

/*
    基本类型参数传递的是: 变量中保存的值
*/
public class Demo1 {
    public static void main(String[] args) {
        int a = 10;
        change(a);
        System.out.println(a); // 10
    }
    public static void change(int a) {
        System.out.println(a); // 10
        a = 20;
        System.out.println(a); // 20
    }
}

1.执行change() 方法中的 System.out.println(a); // 10

2.执行change() 方法中的a = 20; System.out.println(a); // 20

3.执行main() 方法中的 System.out.println(a); // 10

2、**引用类型参数传递的是变量中保存的地址值**。由于传递的是地址,当方法中的将值改变时,其他地方也会受影响。

/*
引用类型参数传递的是: 变量中保存的地址值
*/
public class Demo2 {
    public static void main(String[] args) {
        int[] arrs = new int[]{10, 20, 30};
        change(arrs);
        System.out.println("main: " + arrs[1]);//222
    }
    public static void change(int[] arrs) {
        System.out.println("方法内1:" + arrs[1]);//20
        arrs[1] = 222;
        System.out.println("方法内2:" + arrs[1]);//222
    }
}

1.执行change() 方法中的 System.out.println("方法内1:" + arrs[1]);//20

2.执行change() 方法中的 arrs[1] = 222; System.out.println("方法内2:" + arrs[1]);//222

3.执行main() 方法中的 System.out.println("main: " + arrs[1]);//222

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值