方法
方法
何谓方法?
解决问题的一种
比如怎么去学校,骑自行车,坐公交车等等都是方法中的一种
方法在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),可能就报错了,很影响程序性能,当然递归就是一个思想的学习,有时候也会为我们提供一个很不错的思路,运用它的时候还是得好好思考,谋定而后动啊。