Java基础学习之路-笔记day8

方法概述
    概念:方法(method)就是一段具有独立功能的代码块,需要手动调用才能执行
    作用:可以提高代码的复用性和可阅读性,但是不会提高运行效率。
    方法必须先创建才可以使用,该过程称为方法定义
    方法创建后并不是直接运行的,需要手动使用后才执行,该过程称为方法调用

方法的定义和调用
    定义格式:
        public static void 方法名 ( ) {
    // 方法体;
}
    调用格式:
        方法名();
    方法必须先定义,后调用,否则程序将报错
    方法调用内存图
        方法在没有被调用的时候,都在方法区中字节码文件(.class)中存储
        方法在被调用的时候,要进入到栈内存中才能运行
        
    案例
        需求:设计一个方法method,方法中定义一个变量(数值随意) 判断这个变量是奇数还是偶
数,并在main方法中调用method。
思路:
①:定义方法,名称为method
②:方法中定义变量,使用if语句判断是奇数还是偶数
③:main方法中调用method方法
        public static void method() {
    int num = 10;
    if (num % 2 == 0) {
        System.out.println("偶数");
    } else {
        System.out.println("奇数");
    }
}
public static void main(String[] args) {
    method();
}
 

带参数方法的定义和调用
    定义格式:
        public static void 方法名 (参数列表) {
    方法体;
}
        参数列表可以由1到多个参数组成,多个参数之间使用,分割
        参数由数据类型和变量名组成: 数据类型 变量名 eg:int a
        方法定义时,参数中的数据类型与变量名都不能缺少,缺少任意一个程序将报错
    调用格式:
        方法名(参数);
        方法名(参数1,参数2);
        方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错
    形参和实参
        形参:全称形式参数,是指方法定义时的参数,用来接收方法调用时的参数。
            格式:方法名(形参类型1 形参变量名1, 形参类型2 形参变量名2)
        实参:全称实际参数,方法调用中的参数,该参数的值传递给形式参数后参与方法中代码的运算
            格式:方法名(实参变量名1,实参变量名2)或者(实参常量1,实参常量2)
        形参和实参的关系
            参数名称:没有关系
                实参的变量名和形参的变量名没有关系,可以完全不一样
                分别是两个或两组不同的参数,仅仅在在调用时,将实参变量的值赋值给形参变量


            当参数为引用数据类型时
                把实参变量的值赋值给形参变量,赋的值其实就是引用类型对象在堆内存中的地址值
                形参和实参指向了堆内存中同一地址值,通过任意一个参数修改其值,另外一个参数的值的具体内容会同步发生改变
    练习
        需求:设计一个方法(print) 用于打印 n 到 m 之间所有的奇数
        思路:
①:定义方法,名称为print
②:为方法添加两个int类型的形参,准备接受调用者传递过来的实参
③:方法中设计for循环,循环从n开始,到m结束
④:循环中加入if判断,是奇数,则打印
⑤:main方法中调用print方法,传入两个实际参数

        代码
            package com.itheima.method2;
public class Demo2Method {
    public static void main(String[] args) {
    // 5:main方法中调用print方法,传入两个实际参数
    print(20,10);
    }
    //1:定义方法,名称为print
    // 2:为方法添加两个int类型的形参,准备接受调用者传递过来的实参
    public static void print(int n, int m){
        System.out.println(n + "到" + m + "之间的奇数为:");
        // 3:方法中设计for循环,循环从n开始,到m结束
        for(int i = 20; i <= 10; i++){
            // 4:循环中加入if判断,是奇数,则打印
            if(i % 2 == 1){
                System.out.println(i);    
            }
        }
    }
}

带返回值方法的定义和调用
    定义格式
        public static 数据类型 方法名 ( 参数 ) {
    return 数据 ;
}
        方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错
    调用格式
        方法名 ( 参数 ) ;
        数据类型 变量名 = 方法名 ( 参数 ) ;
        方法的返回值通常会使用变量接收,否则该返回值将无意义
    练习
        需求:设计一个方法可以获取两个数的较大值,数据来自于参数
        思路
            1. 定义一个方法,声明两个形参接收计算的数值,求出结果并返回
2. 使用 if 语句 得出 a 和 b 之间的最大值,根据情况return具体结果
3. 在main()方法中调用定义好的方法并使用 【 变量保存 】
        代码
            public class Demo2Method {
    /*
    需求:设计一个方法可以获取两个数的较大值,数据来自于参数
    1. 定义一个方法,声明两个形参接收计算的数值,求出结果并返回
    2. 使用 if 语句 得出 a 和 b 之间的最大值,根据情况return具体结果
    3. 在main()方法中调用定义好的方法并使用 【 变量保存 】
    */
    public static void main(String[] args) {
    // 3. 在main()方法中调用定义好的方法并使用 【 变量保存 】
        System.out.println(getMax(10, 20)); // 输出调用
        int result = getMax(10, 20);
        System.out.println(result);
        for (int i = 1; i <= result; i++) {
            System.out.println("HelloWorld");
        }
    }

    // 方法可以获取两个数的较大值
    public static int getMax(int a, int b) {
        if (a > b) {
            return a;
        } else {
            return b;
        }
    }
}

方法定义和使用汇总
    方法的通用格式
        public static 返回值类型 方法名(参数列表) {
    方法体;
    return 数据 ;
}
            public static 返回值类型 方法名(int num1, int num2, double num3){}
        public static:修饰符,目前先记住这个格式
        返回值类型:方法操作完毕之后返回的数据的数据类型
        方法名:标识符,通过方法名调用该方法
        参数列表:方法的代码运行前 , 所需要的材料
        方法体:依业务而定,就是方法运行的主体
        return作用
            1. 用于结束方法
            2. 如果有的话,用于将数据返还给调用者.
        放在一起统称方法签名
    方法必须先定义再使用
        按照方法要求的格式,在类中其他方法外完成方法签名和方法体的编写,这个过程称为方法的定义
        根据需求在指定位置使用上述定义好的方法的过程称为方法的调用
        方法的编写顺序和执行顺序无关,和调用顺序一致。
        将代码抽取到方法中,可以提高代码的复用性和可阅读性,但是不会提高代码执行效率
    方法定义时的注意事项
        方法签名
            方法签名包括方法名和参数列表,不包括返回值返回值类型及修饰符
            两个方法的方法签名一致:方法名和参数列表完全一致
            参数列表一致:参数类型、参数个数、参数顺序完全一致才行,但是与参数名称无关
                public static int getSum(int a, int b, double c){
    return 10;
}    - getMax(1,2,3.0)
                public static void getSum(int num1, int num2, double num3){}    - getMax(1,2,3.0)
                public static void getSum(int num1, double num3, int num2){}    - getMax(1,3.0,2)
                这两个方法签名不一致,因为参数顺序不一样,这个有可能是重载,之后会讲
                这两个方法签名一致,与形参名无关
        定义方法时,要做到两个明确
            明确参数列表:分析方法运行之前是否需要不能百分百明确的材料, 要什么类型的, 要几个?
            明确返回值类型:主要是明确方法操作完毕之后是否有数据返回,如果没有,写void;如果有,写对应的数据类型
        方法不能嵌套定义
            只能定在类里面,其他方法外面
            方法不可以嵌套定义,但是可嵌套调用
                main(){
    int max = getMax()
    sout(max)
}
getMax(){
    int num = getScannerNum();
    int num2 = getScannerNum();
    // 比较大小
}
getScannerNum(){
    //创建一个键盘录入的对象
   // 开启通道获取键盘录入的数据
   // 把录入的数据返回
}

返回值和返回值类型
            方法的返回值最多只能有一个
            1. 如果方法没有返回值
                方法签名中返回值类型需要写void
                方法体中可以不写return
                方法体中可以写return,但是要这样写 return;
            2. 如果方法有一个返回值
                方法签名中返回值类型不能写void
                方法签名中返回值类型要与方法体中return语句返回的数值类型一致
                方法体中必须通过return的方式返回指定类型的值,否则会报错
是否有return语句的标准:从语法的角度校验是否有最少有一个return语句会被执行
            3. 如果方法有多个返回值
                一个方法不可以返回多个返回值
                可以使用数组等容器将多个数据封装到一个容器中返回
                    public static int getSum(int a, int b, double c){
    return 10;
}    - getMax(1,2,3.0)
                    public static int[] getSum(int a, int b, double c){
    int[] arr1 = new int[3]
    int[] arr2 = new int[3]
    // 一顿操作
   int[][] arrDouble = new int[2][];
    arrDouble[0] = arr1;
    arrDouble[1] = arr2;
    return arrDouble;
}    - getMax(1,2,3.0)
        return语句下面,不能编写代码,因为永远执行不到,属于无效的代码
            语法逻辑上,一定不会被执行的return后面,不能再写其他代码
            但是,如果某个return语句不一定会被执行,后面是可以写其他语句的。
        一个方法中,可以有多个return语句,但是只会执行其中一个
            因为只要执行了任何一个,当前方法就结束了。
            如果写了多个return语句,从语法的角度来说必须要有一个return语句能够被执行,否则会报错
            int getMax(){
    if(a > b){
        return a;
    }else if(a<=b){
        return b;
    }else{    //这块代码不能省
        return b;
    }
}
    方法调用时的注意事项
        方法调用时传递的参数需要完全符合方法定义时的参数列表要求
        调用格式1:方法名(与参数列表匹配的变量/常量);
            无返回值的方法,直接调用即可,而且是唯一的可用的调用方式
            有返回值的方法可以这样调用,但是不建议。因为无法获取返回值
        调用格式2:赋值调用
            数据类型 变量名 = 方法名(与参数列表匹配的变量/常量);
        调用格式3:输出调用
            System.out.println(方法名(与参数列表匹配的变量/常量));
        调用格式4:传参调用
            作为实参传递进其他的方法列表中
            System.out.println(方法名(与参数列表匹配的变量/常量));
            System.out.println(getMax(a,b));
            System.out.println(b);
        这些调用方式仅适用于有返回值的方法
        

发布了12 篇原创文章 · 获赞 2 · 访问量 1894

猜你喜欢

转载自blog.csdn.net/ytzang/article/details/104428688