方法

方法

方法概述

一段具有独立功能的代码块

必须先创建方法,需要手动调用后才执行

方法的定义格式

public static void 方法名( ) {

    方法体;   // 方法所包裹的逻辑代码
}

方法的调用格式

在main方法中,通过方法名调用

 方法名();

方法的调用过程

​ main方法先被调用,随后执行main方法中的逻辑代码,当遇到了调用自定义方法的语句,执行自定义方法内部的逻辑代码,自定义方法执行完毕之后,继续回到main方法中执行

注意: 方法与方法之间是平级关系, 不能嵌套定义

形式参数和实际参数

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

public static void method(int a){
    
}

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

method(10);

带返回值方法定义和调用

方法的返回值类型,和返回值的关系

​ 对应关系,方法的返回值类型,必须跟返回值的类型对应,否则引发编译错误

返回值的接收

​ 带有返回值的方法调用之后,会产生一个运算后的结果,这个结果没有接收被使用的话,这个返回值将毫无意义

​ 注意 : 后期有具体返回值的方法, 也可以进行直接调用

return关键字的作用

作用1 : 将所在的方法结束

作用2 : return关键字用于将方法运算的结果,返还给调用处

方法的通用格式

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

    方法体;

    return 数据;
}
//如果方法操作完毕,没有数据返回,返回值类型写void,方法体不写return

//void类型的方法,直接调用,

//非void类型的方法,用变量接收调用

定义方法时,要做到两个明确

明确参数:明确参数的类型数量

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

方法注意事项

  1. 方法不能嵌套定义

  2. 方法的返回值类型为void,表示该方法没有返回值

  3. return语句下面,不能编写代码,因为永远执行不到,属于无效的代码

方法重载

方法重载:在同一个类中方法名相同,参数列表不同,与返回值无关

参数列表不同:

​ 1,类型不同

​ 2,个数不同

​ 3,顺序不同(毫无意义)

方法重写:在继承体系中,子类出现了和父类一模一样的方法声明(方法名,参数列表,返回值类型)

方法参数传递基本类型

对于基本数据类型的参数,形式参数的改变,不影响实际参数

public class Test1 {
//方法参数传递为基本数据类型 :传入方法中的是具体的数值
    public static void main(String[] args) {
        int number = 100;
        System.out.println("调用change方法前:" + number);
        change(number);
        System.out.println("调用change方法后:" + number);
    }

    public static void change(int number) {
        number = 200;
    }
}

原因:每个方法在栈内存中,都会有独立的空间,方法运行结束后就会弹栈消失

方法参数传递引用类型

对于引用数据类型的参数,形式参数的改变,影响实际参数

public class Test2 {
//方法参数传递为引用数据类型 : 传入方法中的是内存地址           
    public static void main(String[] args) {
        int[] arr = {10, 20, 30};
        System.out.println("调用change方法前:" + arr[1]);
        change(arr);
        System.out.println("调用change方法后:" + arr[1]);
    }

    public static void change(int[] arr) {
        arr[1] = 200;
    }
}

原因:引用数据类型的传参,传入的是地址值(存放在堆内存中),内存中会造成两个引用指向同一个内存的效果,所以即使方法弹栈,堆内存中的数据也已经是改变后的结果

递归

public class Recursive {
    public static void main(String[] args) {
       /* for (int i = 0; i <args.length ; i++) {
            System.out.println(args[i]);
        }*/
        System.out.println(f(100));
    }
    private static double f(double n) {
        if (n == 1) {
            return 1;
        } else {
            return n * f(n - 1);
        }
    }
}
原文地址:https://www.cnblogs.com/tyrion4396/p/13375122.html