2021-07-23_方法学习笔记

方法

1.方法简述

方法(method)就是一段具有独立功能的代码块,不调用就不执行;

方法必须先创建才能使用,该过程成为方法定义

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

2.方法的定义和调用

2.1 方法的定义

A.格式

public static void 方法名(){
    方法体
}

2.2 方法的调用

A.格式

方法名();

2.3 方法定义和调用的注意事项

  • 方法必须先定义后调用,否则会报错

  • 方法与方法之间是平级关系,不能嵌套定义,但可以嵌套调用

  • 方法没有被调用的时候,都在内存的方法区中的字节码文件(.class)中存储

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

3.方法在内存中的调用过程

package com.huly.mypacdage01;

public class methodTest {
    /*
    第一步,methodTest这个类的字节码文件会加再到方法区,methodTest.class文件中的主方法和其他方法
    会随着.class文件一起加载到方法区
    */
    public static void main(String[] args) {
        //第二步,虚拟机会自动将主方法调入栈内存中执行
        method01();
        /*
        第三步,由于主方法中只有一句程序语句,且是调用方法method01,所以method01方法会被加载到
        栈内存中执行
         */
    }
    public static void method01(){
        method02();
        /*
        第四步,方法1开始执行后,第一个语句又是调用方法2,所以虚拟机会将方法2也调入栈内存中执行,
        此时,栈内存中共有主方法、方法1和方法2三个方法,由于方法2中方法体只有一句输出语句,所以执行完打印2的指令后后方法2运行完毕从栈内存中释放,
        此时栈内存中还剩两个方法
        */
        System.out.println("1");
        //第五步,执行输出指令,打印1
        method03();
        /*
         第六步,调用方法3,虚拟机会将方法3调入到栈内存中执行,此时栈内存中的方法又恢复到三个了,方法3开始执行后
         输出3,方法3中也只有一个输出语句,打印之后便从栈内存中释放,方法3的内容执行完毕后方法1中也没有程序语句了,
         所以方法1也执行完毕从栈内存中释放。又因为主方法中只有调用方法1的语句,所以在方法1执行完毕之后,主方法也执行完毕从内存中释放
        */
    }
    public static void method02(){
        System.out.println(2);
    }
    public static void method03(){
        System.out.println(3);
    }

}


4.带参数方法的定义和调用

4.1.1 带参数方法的定义

A.格式

public static void 方法名(){
    方法体
}

B.示例

public static void(数据类型 变量名){
    
}
public static void method01(int num){
    
}
public static void method02(int num1,int num2){
    
}

4.1.2 带参数方法的定义的注意事项

  • 方法定义时,参数的数据类型和变量都不能少,缺少任何一个程序都会报错
  • 方法定义时,多个参数之间使用逗号分隔

4.2.1 带参数方法的调用

A.格式

方法名(参数);

B.示例

方法名(变量名/常量值);
method(5);
method(5,6);
meithod(a);

4.2.2 带参数方法的调用注意事项

  • 方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序会报错

4.3形参和实参

4.3.1 形参实参的定义和格式

形参:全称形式参数,是指方法定义中的参数

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

形参和实参可以是变量也可以是常量

示例:

package com.huly.mypacdage02;

public class methodTest02 {
    public static void main(String[] args) {
        takeRemainder(10);//实际参与运算的常量,是实参
        int a =10;
        takeRemainder(a);//实际参与运算的变量,是实参

    }
    public static void takeRemainder (int num){
        //num是定义方法时声明的变量,不调用便不参与运算时形参
        if(num%2==0){
            System.out.println("1");
        }else{
            System.out.println("2");
        }
    }
}

4.3.1 形参实参实战

需求:键盘录入两个数字,输出两个数字之间的奇数

分析:1.

package com.huly.mypacdage03;
import java.util.Scanner;
public class methodTest03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = 0;
        int b = 0;
        cycle:while(true) {
            System.out.println("请输入第一个数字");
            int c = sc.nextInt();
            System.out.println("请输入第二个数字");
            int d = sc.nextInt();
            System.out.println(c);
            System.out.println(d);
            if (c == d || -1 <= c - d && c - d <= 1) {
                System.out.println("请重新输入");
            } else {
                b = c;
                a = d;
                break cycle;
            }
        }
            System.out.println("a=" + a);
            System.out.println("b=" + b);
            takeRemainder02(a, b);

    }
    public static void takeRemainder02(int a ,int b){
        int c = 0 ;
        if(a<b){
            System.out.println("输出"+a+"到"+b+"之间的奇数");

        }else{
            System.out.println("输出"+b+"到"+a+"之间的奇数");
            c = b;
            b = a;
            a = c;
        }
        for(int i = a+1;i<b;i++){
            if(i%2==1) {
                System.out.println(i);
                c++;
            }
        }
        return c;
    }
}


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

4.4.1 带返回值方法的定义格式

public static 数据类型 方法名(参数){
    return 数据;
}
  • 注意事项:

a. 方法定义时,return后面的返回值与方法定义上的数据类型要匹配否则程序将报错

b. return返回的数值可以直接被主方法里面的变量接收


4.4.2 带返回值方法的调用格式

数据类型 变量名 = 方法名(参数);
boolean flag = isEvenNumbet(5);
  • 注意事项:

a. //方法名(参数);// 这种调用格式不算错误,但没有意义,返回值的数据没有被接收,和无return值的方法调用效果一样,都只是执行了一次被调用的方法

b. 方法在调用时,可以直接将值赋予被调用方法的形式参数,如:int a =methodTest01(a:10,b:20)。

4…4.3 实战

package com.huly.mypacdage04;
import java.util.Scanner;

public class meithodTest04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = 0;
        int b = 0;
        cycle:while(true) {
            System.out.println("请输入第一个数字");
            int c = sc.nextInt();
            System.out.println("请输入第二个数字");
            int d = sc.nextInt();
            System.out.println(c);
            System.out.println(d);
            if (c == d || -1 <= c - d && c - d <= 1) {
                System.out.println("请重新输入");
            } else {
                b = c;
                a = d;
                break cycle;
            }
        }
        System.out.println("a=" + a);
        System.out.println("b=" + b);
        takeRemainder02(a, b);
        int result = takeRemainder02(a,b);
        System.out.println(result);

    }
    public static int takeRemainder02(int a ,int b){
        int c = 0 ;
        int d = 0;
        if(a<b){
            System.out.println("输出"+a+"到"+b+"之间的奇数");

        }else{
            System.out.println("输出"+b+"到"+a+"之间的奇数");
            c = b;
            b = a;
            a = c;
        }
        for(int i = a+1;i<b;i++){
            if(i%2==1) {
                System.out.println(i);
                d++;
                System.out.println("d="+d);
            }
        }
        return d;
    }
}

/*
注意事项:1.被输出语句调用,方法仍会执行一遍方法体里面的所有内容,且被输出的值在被调用方法执行完之后才            会打印
        2.形参名字和其他方法里面的名字重复不会报错
*/

4.4.4 形参为引用类型的方法调用和取得返回结果

A. 示例一

package com.huly.mypacdage06;
/*
需求:设计一个方法遍历数组,要求遍历结果在一行上显示,且类型为[1, 2, 3, 4, 5],为增加难度,
本次要求键盘录入,输入想输入的数组元素个数之后再遍历
*
解析:1.键盘录入,需要导入Scanner包,输入的元素需要放入数组中,需要用for循环挨个输入
     2.输入想输入多少个就输入多少个的数组需要
* */
import java.util.Scanner;
public class methodTest07 {
    public static void main(String[] args) {
        int[] arr1 = new int[100]; //不会定义长度可变的数组,这里定义一个长度用不完的
        Scanner sc = new Scanner(System.in);
        //int[] arr = new int[]{};此路暂时不同,不会定义一个不确定长度的数组
        int i = 0;
        int j = 0;
        cycle:while(i<99) {//不知道输入多少次停止,用while循环
            System.out.println("请输入第"+(i+1)+"个数据");
            j = sc.nextInt();
            if(j==-1){
                break cycle;
            }
            arr1[i] = j;
            i++;
        }
        System.out.println("输入元素个数为:"+i);
        int[] arr2 = new int[i];
        for (int k = 0; k <i; k++) {
            arr2[k] = arr1[k];
        }
        tarverse(arr2);

    }
    public static void tarverse(int[] arr){
        System.out.print("[");
        for (int f = 0; f <arr.length; f++) {
            if(f+1==arr.length){
                System.out.println(arr[f]+"]");
            }else {
                System.out.print(arr[f]+" ");
            }
        }

    }
}

B. 示例二

package com.huly.mypacdage06;
/*
需求:调用方法返回数组的最大值和最小值
分析:1.方法的返回值只能有一个,所以需要在方法里额外定义一个数组,用来存储取得的最大值和最小值,然后将数组的地址返回给主方法,主方法得到地址之后就可以取得相应的数据
*/
public class methodReturn {
    public static void main(String[] args) {
        int[] arr = new int[]{22,33,44,55,45};
        int result[] = arr1(arr);
        System.out.println(result[0]);
        System.out.println(result[1]);

    }
    public static int[] arr1(int[] arr){
        int max = arr[0];
        for (int i = 0; i <arr.length ; i++) {
            if(max<arr[i]){
                max = arr[i];
            }
        }
        int min = arr[0];
        for (int i = 0; i <arr.length ; i++) {
            if(min>arr[i]){
                min = arr[i];
            }
        }
        int[] maxandmin = new int[]{min,max};
        return maxandmin;
    }
}

5 方法的通用格式

public static 返回值类型 方法名(参数){
    方法体;
    return 数据;
}

public static 修饰符,暂时不需要学习

返回值类型:方法执行完毕后返回的值的数据类型,如果方法执行完毕之后没有数据返回,这里写void,意思是空的数据类型,没有返回值时可以带return也可以不带,带的时候要注意return后面不能又具体的数据,且方法执行到return时自动结束,可以用return;结束方法执行。

方法名:调用方法时候使用的标识符

参数:有数据类型和变量名组成,多个参数之间用逗号隔开

方法体:完成功能的代码块

return:方法执行完后,若有数据返回,用与将返回数据返回给调用者

5.方法的重载

在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或者参数个数,这些同名的方法就构成了重载关系。

即:

同一个类中,方法名相同参数不同的方法就构成了方法的重载,参数不同是指参数的个数、类型和顺序不同。

注意:1.识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关。

​ 2.方法名相同,参数也完全相同称为方法重复性定义,是一种冲突性错误不构成方法 的重载关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值