Java学习笔记===》4.方法Method

方法(method)

一、方法概述

1.方法

1>什么是方法:

方法(method)是程序中最小的执行单元,是一段居于独立功能的代码块,不调用就不执行

2>为什么要有方法:

方法的出现,会提高打代码的复用性

3>方法使用提前须知

①方法必须先创建才可以使用,该过程为方法定义

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

二、方法的定义和调用

1.方法的定义

1>格式:

public static void 方法名(){

//方法体;

}

2.方法的调用

1>调用的格式:

方法名();

注意:

①方法必须先定义后调用,否则程序将会报错

②方法与方法之间是平级关系,不能嵌套使用

③方法在任何位置调用,不一定要在main方法内

package com.test02_method;
//方法的创建和调用
/*
    方法的定义格式:
        public static void 方法名(){
            方法体
        }
    方法的调用格式:
        方法名();

        方法与方法之间是平级关系,不能嵌套
 */
public class Demo01_method {
    public static void main(String[] args) {
        //方法的调用:
        eat();
    }

    //方法的定义
    public static void eat(){
        study();
        System.out.println("吃饭");
    }
    public static void study(){
        System.out.println("学习");
    }


}
package com.test02_method;

import java.util.Scanner;

//需求:定义方法,判断一个整数的奇偶性
//注意:方法需要先定义在调用,方法不会自动执行
public class Demo02_method_test01 {
    public static void main(String[] args) {
        //5.调用方法
        panduan();
    }
    //1.定义方法:判断整数的奇偶性
    public static void panduan(){
        //1.创建键盘对象
        Scanner sc = new Scanner(System.in);
        //2.提示用户录入
        System.out.println("请输入一个整数");
        //3.接收录入数据
        int num = sc.nextInt();
        //4.判断录入数据的奇偶性
        if(num % 2== 0){
            System.out.println("这个数是偶数");
        }else {
            System.out.println("这个数是奇数");
        }
    }
}

三、带参数的方法的定义和调用

1.方法调用过程

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

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

2.为什么要有带参数方法

3.带参数方法定义

①格式:public static void 方法名 ( 参数 ) {方法体。。。}

②格式(单个参数):public static void 方法名 (数据类型 变量名 ) {方法体。。。}

示例(单个参数):public static void 方法名 ( int number) {方法体。。。}

③格式(多个参数):public static void 方法名 (数据类型 变量名1,数据类型 变量名1,… ) {…}

示例(多个参数):public static void 方法名 ( int number1,int number2,…) {方法体…}

④注意:

★方法定义时,参数中的数据类型与变量名都不能少,缺少任意一个程序将报错

★方法定义时,多个参数之间使用逗号(,)隔开

4.带参数方法调用:

1>格式:

方法名(参数);

①格式: 方法名 ( 参数 ) {方法体。。。}

​ **②格式(单个参数): 方法名 ( 变量名/常量值 ) **

示例(单个参数): method ( num/5)

​ **③格式(多个参数): 方法名 ( 变量名1/常量值1, 变量名2/常量值2,… ) **

​ **示例(多个参数): getmax ( num/5,sum/6…) **

2>注意:

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

package com.test02_method;

import java.util.Scanner;

//需求:定义方法,判断一个整数的奇偶性
//注意:方法需要先定义在调用,方法不会自动执行
public class Demo03_method_test02 {
    public static void main(String[] args) {
        //1.创建键盘对象
        Scanner sc = new Scanner(System.in);
        //2.提示用户录入
        System.out.println("请输入一个整数");
        //3.接收录入数据
        ;
        //5.调用方法
        panduan(sc.nextInt());
    }
    //1.定义方法:判断整数的奇偶性
    public static void panduan(int num){

        //4.判断录入数据的奇偶性
        if(num % 2== 0){
            System.out.println("这个数是偶数");
        }else {
            System.out.println("这个数是奇数");
        }
    }
}
3>形参和实参
1>形参

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

2>实参

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

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

1.为什么要有带返回值的方法

我们经常会根据一个方法产生的结果,去组织另外一段代码逻辑

为了拿到这个方法产生的结果,就需要定义带有返回值的方法

2.格式:

1> 带返回值方法定义

public static 数据类型 方法名(参数){

方法体

return 数据;

}

示例:public static boolean isEvenNumber(int number){

方法体;

return true;

}

2>带返回值方法调用

格式1:方法名(参数);

示例: isEvenNumber(5);

格式2:数据类型 变量名 = 方法名 (参数);

示例:boolean flag = isEvenNumber(5);

3>注意:

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

方法的返回值通常会使用变量接收,否则该返回值将无意义

4>return关键字的作用

①返回返回值(结果)

②并且停止方法

5>注意事项

①return后面的的返回值,与方法定义上的数据类型要匹配,否则报错

②方法的返回值通常会使用变量接受,否则给返回值讲无意义

6>方法通用定义格式

①格式

public static 返回值类型 方法名(参数){

方法体

return 数据;

}

②public static: 修饰符,先记住这个格

③返回值类型: 方法操作完毕之后返回的结果数据所对应的数据类型

如果方法操作完毕,没有数据返回,这里写void,而且方法体中一般不写return

④方法名: 调用方法时使用的标识

⑤参数: 有数据类型和变量名组成,多个参数间用逗号隔开,方法运行之前所需要的材料

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

⑦return: 如果方法操作完毕,有数据返回,用于把数据返回给调用者

​ **注意:**​

★定义方法时,要明确两个概念

①明确参数:主要是明确参数的类型和数量

②明确返回值类型:主要明确方法操作完毕之后是否有数据返回,如果没有写void,如果有,写对应的

数据类型

★调用方法时:

①viod类型的方法,直接调用即可

②非void类型的方法,推荐用变量接受调用

五、方法的注意事项

1.方法不能嵌套定义
2.方法的返回值

​ 方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写

​ 如果要写,return后面不能跟具体的数据

3.return语句

​ 热于任内语句下面,不能编写代码,因为永远执行不到,属于无效的代码

​ return可以用于结束代码,也就是将方法从栈内存中弹出去,该过程称之为方法的弹栈

package com.test02_method;
import java.util.Random;
/*
需求:定义一个方法,获取一个in类型数组的元素平均值
//用随机数录入接收数组元素
 */
public class Demo07 {
    public static void main(String[] args) {
        //提示用户输入
        System.out.println("请输入数组元素");
        //数组动态初始化,接收录入元素
        int [] arr =new int[10];
        //调用方法
        int arrAvg = getArrAvg(arr);
        //打印平均值
        System.out.println("元素平均值为"+arrAvg);
    }
    //1.定义方法
    public static int getArrAvg (int [] arr ){
        //2.定义求和变量
        int sum = 0;
        //3.遍历数组
        for (int i = 1; i < arr.length; i++) {
            //4.元素求和
            //定义随机数
            Random r = new Random();
            //收随机数
            int number = r.nextInt(100)+1;
            //数组接收随机数
            arr[i] = number;
            System.out.print("第"+i+"个元素的值为"+arr[i]+" ");
            //累加
            sum += arr[i];
        }
        //5.计算平均值
        int avg = sum/arr.length;
        //返回平均值
        return avg;
    }
}
package com.test02_method;
//需求:定义一个方法,获取一个in类型数组的元素平均值
//用随机数录入接收数组元素

import java.util.Scanner;

public class Demo08 {

    public static void main(String[] args) {
        //定义数组,动态初始化,定义数组长度
        int [] array = new int[10];
        //调用方法,接收平均数数据
        int avg = getArrayAvg(array);
        //打印平均数
        System.out.println("数组元素的平均值为"+avg);
    }
    //定义带参方法
    public static int getArrayAvg(int []array){
        //创建键盘对象
        Scanner sc = new Scanner(System.in);
        //定义求和变量
        int sum = 0;
        //数组遍历
        for (int i = 0;i < array.length;i++){
            //提示用户分别输入数组元素
            System.out.println("请输入第个"+(i+1)+"数组元素");
            //接收键盘录入的数据
            int number = sc.nextInt();
            //将键盘录入的数据赋值给数组
            array[i] = number;
            //数组元素累加求和
            sum += array[i];
        }
        //定义平均数变量并赋值
        int avg = sum/array.length;
        //返回平均数数据
        return avg;
    }
}

六、方法的重载

1.方法重载

1> 思考:在同一个类中,可不可以存在同名的方法

①方法名相同,参数也完全相同,称为方法的重复定义,是一种冲突性的错误;

②所以在Java中,可以存在同名的方法,但参数不能相同,若参数也相同,就会报错

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

2>什么是方法重载

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

简单记 : 同一个类中,方法名相同,参数不同的方法(参数不同:个数不同 , 类型不同 , 顺序不同\)

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

3>方法重载特点

方法中参数的不同可以构成重载 , 但是不建议

4>方法重载的好处

不用记忆过多繁琐的方法名字

七、方法的参数传递

1.方法参数传递===>基本数据类型

package com.test02_method;

public class Demo11 {

    //方法参数传递基本数据类型:
    //  传入方法中的,是具体的数值
    public static void main(String[] args) {
        int number = 100;
        //调用方法前,number输出100
        System.out.println(number);
        change(number);
        //调用方法后,方法执行完毕,会从栈内存中弹出去
        //而number赋值200后会跟着方法一起谈出去
        //所以在这里二次打印的number是存在main方法的100
        System.out.println(number);
    }
    public static void change(int number){
        number = 200;
    }
}

2.方法参数传递===>引用数据类型

package com.test02_method;

public class Demo12 {
    //方法参数传递为引用苏话剧类型
    //  传入方法的是内存地址
    public static void main(String[] args) {
        
        //定义数组
        int [] arr = {10,20,30};
        
        //调用方法前使用arr的地址值输出索引[1]的值并输出
        System.out.println(arr[1]);
        
        //调用方法,使用同一个地址值,对数组arr里面索引[1]的值做改变
        //但是在方法执行后,方法体弹出栈内存,
        //但是对数组里面索引[1]的值做的改变并没有失效
        change(arr);
        
        //所以当前打印的是方法对数组里面索引[1]改变之后的 值
        System.out.println(arr[1]);
    }
    public static void change(int [] arr){
        arr [1] = 200;
    }
}

3.练习:

package com.test02_method;


//需求:定义方法,同时获取数组的最大值和最小值

public class Demo13_getMV {
    public static void main(String[] args) {
        //6.定义数组
        int [] arr1 = {11,22,33,44,55,66,77};
        //7..调用方法
        int [] arr2 = getMV(arr1);
        //8.将max和min取出打印
        System.out.println("最大值为:"+arr2[0]);
        System.out.println("最小值为:"+arr2[1]);
    }
    //1.定义方法
    public static int[]  getMV(int [] arr1) {
        //定义最大值变量
        int max = arr1[0];
        //定义最小值变量
        int min = arr1[0];
        //遍历数组
        for (int i = 0; i < arr1.length; i++) {
            //2.求最大值
            if (arr1[i] > max) {
                max = arr1[i];
                //3.求最小值
            } else if (arr1[i] < min) {
                min = arr1[i];
            }

        }
        //4.将最值装入一个数组容器
        int [] arr2 = {max, min};
        //5.返回数组
        return arr2;
    }
}

八、方法的内存图

1>.方法调用的基本内存原理

2>方法传递基本数据类型的内存原理

3>方法传递引用数据类型的内存原理

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值