方法

方法

何谓方法?

解决问题的一种

比如怎么去学校,骑自行车,坐公交车等等都是方法中的一种

方法在java中就是一个功能块,尽量一个方法就一个功能,保证原子性利于后期拓展

命名规则:首字母小写 驼峰原则

方法的定义和调用

方法类比其他语言的函数

其基本形式如下

修饰符 返回类型 方法名(参数类型 参数名){
    //...
    //方法体
    //...
    return 返回值;
}

修饰符,可选,告诉编译器如何去调用该方法

返回类型,该方法返回值的类型,是int,还是String亦或是空的

方法名,那就是方法的名字啦,随便取,但是要符合命名规范

参数,分为形参实参,形参就是方法里的,它可以不初始化,uoge形式上的参数,比如一个add方法,int a int b,然后return来一个a+b,这就是我一个简单的形参理解。实参,那就是实际上的咯,有一个值,我在main方法调用add方法,如...add(2,3),这时候就是a=2,b=3,返回一个5,这就是实参。

  • 形参:方法被调用时用于接受外部的数据
  • 实参:调用方法时传值给方法的数据

方法体,方法内的语句,定义该方法的功能

重载

只得是有相同的方法名,但是形参类型不一样的方法。

还是用add来说明

public static int add(int a, int b){
    return a + b;
}
public static double add(double a, double b){
    return a + b;
}

两个方法的功能是一模一样的,不同的是他们的形参类型不一样,一个是int类型,一个是double类型。这样在main方法主题里调用add方法,传值给add方法时,编译器会自动匹配类型,比如add(3.0, 2.0)就会调用下面那个add()方法。 编译器根据调用方法的参数个数、类型来自动匹配,如果匹配不成功,那么就会报错了。

重载规则

  • 方法名相同
  • 形参一定不一样,在个数上,参数类型上不同
  • 方法的返回类型可以一样,也可以不一样,如果仅仅是方法的返回类型不一样,这就不足以构成重载

不定项参数

有的时候一个方法里几个形参可能不满足需求,如果调用方法穿了十几个甚至几十个,那么这个方法要重载很多次,就会很麻烦,这样,jdk5开始,就支持传递同类型可变参数给一个方法,示例如下

public static void method(int ... numbers){
    for (i = 0; i < numbers.lenghth; i++){
        System.out.println(numbers[i]);
     	return ;
    }
}

其中设置的方法就是,形参类型跟一个... 省略号然后接参数名,这里形参实际上就是一个数组,这样调用方法传值就是往数组里放东西了。

注意点

  • 一个方法只能有一个可变参数
  • 可变参数一定方法的最后一个参数,任何普通参数必须在它的前面声明
  • 传值给可变参数要保证参数类型一致

递归

通俗的讲,就是方法自己调用自己

用一个阶乘方法来简单说明一下

public class Factorial {
    public static void main(String[] args) {
        //实例化一个对象
        Factorial factorial = new Factorial();
        //调用阶乘方法f,传值3并且打印出来
        System.out.println(factorial.f(3));

    }
    //阶乘方法
    static int f(int i){
        if (i == 1){
            return 1;
        }else {
            return f(i-1)*i;
        }
    }
}

很清晰的看到方法递归调用,会有一个尽头,上面代码尽头就是f(1),这是递归头

然后有一个递归体:就是什么时候调用自己,很明显就是不满足i为1的时候调用,然后套娃。套到最后总会有一个边界然后依次返回。

当然递归方法,我们人看的爽了,写这么少能有这么多运算过程,对计算机来说它就不爽了(计算机:礼貌你吗?)

递归是一个很好的思路,但是不算是一个优秀的算法,还是上面的例子,如果是f(100),可能就报错了,很影响程序性能,当然递归就是一个思想的学习,有时候也会为我们提供一个很不错的思路,运用它的时候还是得好好思考,谋定而后动啊。

posted @ 2021-10-22 19:56  独高的浮云  阅读(83)  评论(0)    收藏  举报