java中的方法学习小结

230 阅读4分钟

在编程中我们在解决一类事情时可能有一些需要重复的代码,就是在多处都会用到的代码.如果都打出来就会大大增加我们的工作量,这个时候我们可以把这些代码封装起来,然后起个名字,这在java中就叫方法.


1.方法的定义

方法的定义的语法格式为:

[修饰符] 返回值类型 方法名([参数类型 参数名]){//[]--->可有可无
     ...
     方法体
    ...
    return 返回值;
    }

修饰符:访问权限修饰符,默认为public static

返回值类型:经过方法的计算后得到的结果的类型,可以为基本数据类型或引用数据类型,当没有返回值时为void

方法名:方法的名字,方法名就是一个标识符,所以应该遵守标识符的命名规则和规范,即方法名的首字母小写,之后的每个单词的首字母大写.并且要见名知意.

参数:参数列表是指方法的参数类型、顺序和参数的个数,参数列表中可以存在多个参数,每个参数之间用逗号','隔开

方法体:解决功能的代码块

return:有两种功能,一个是提前结束方法,一个是带出返回值

方法签名:方法名与参数列表共同组成方法签名,方法签名确保了在类中的唯一性

例:

    public static void main(String []args){
        System.out.println("Hello world");
    }

其中方法可以分为有返回值的跟无返回值的,无返回值的可以没有return,有返回值的必须有return.

形式参数(形参):定义方法时()中的参数 :局部变量的声明

实际参数(实参):调用方法时()中的参数 :局部变量的赋值

2.方法的调用

一个方法定义之后,只有通过调用才能发挥作用.在调用时,调用的控制权有方法调用处转移到方法中,方法遇到return或者}时,将调用权还给调用处.也就是从哪里来回哪里去.

在调用的时候形参跟实参的数据类型跟顺序应该一致.

方法中的数据类型大小比较:

实参<=形参

接收返回值的数据类型>=方法的返回值类型>=返回值的数据类型

其中方法的调用方式大致分为三类:

  1. 直接调用:有返回值的方法不推荐使用,因为返回值获取不到

    方法名(实参);

例:

public class Demo { 
public static void main(String[] args){ 
        getPI();
    } 
public static void getPI(){
	System.out.println("3.1415926");
    }
}
  1. 赋值调用:

    接收数据类型 变量名=方法名(参数);

例:

public class Demo { 
public static void main(String[] args){ 
        double pi=getPI();
    } 
public static void getPI(){
	return 3.1415926 ;
    }
}
  1. 输出调用:

    System.out.println(方法名(参数));

例:

public class Demo { 
public static void main(String[] args){ 
        System.out.println(getPI());
    } 
public static void getPI(){
	return 3.1415926 ;
    }
}

3.方法的重载

假设我们定义了一个"吃"方法,每次调用时传入实参"饭",在"吃"中我们写了吃饭的方式.但是有时候"饭"有很多种,每种的"饭"需要不同的吃法,但是一个"吃"中只能写一种吃法,所以这个时候我们就需要写几个不同的"吃",虽然都名为吃,但是却根据饭的不同,我们有不同的吃法.这个多写几个"吃"的方式就是方法的重载.

重载是一个类里面,方法名字相同,但是参数列表不同,返回类型可以相同也可以不同,每个重载的方法都有独一无二的参数列表.

其中重载的规则如下:

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);

  • 被重载的方法可以改变返回类型;

  • 被重载的方法可以改变访问修饰符;

  • 被重载的方法可以声明新的或更广的检查异常;

  • 方法能够在同一个类中或者在一个子类中被重载;

  • 无法以返回值类型作为重载函数的区分标准.

例:

public class Overloading {
public int test(){
    System.out.println("这是无参的方法test");
    return 1;
}

public void test(int a){
    System.out.println("这是有参的方法test");
}   

//以下两个参数类型顺序不同
public String test(int a,String s){
    System.out.println(s);
    return a;
}   

public String test(String s,int a){
    System.out.println(s);
    return a;
}   

public static void main(String[] args){
    Overloading ove = new Overloading();
    System.out.println(ove.test());
    ove.test(1);
    System.out.println(ove.test(1,"test3"));
    System.out.println(ove.test("test4",1));
}
}

4.方法的递归调用

方法的递归调用就是方法就是自己调用自己.

在使用递归时,我们需要注意的是:

递归方法必须要有明确的结束条件
尽量少使用递归

例:求斐波那契数列

public class RecursionDemo {
public static int fb(int num) {
    if (num == 1 || num == 2) {
        return 1;
    } else {
        return fb(num - 2) + fb(num - 1);
    }
}

public static void main(String[] args) {
    for (int i = 1; i < 10; i++) {
        System.out.print(fb(i) + "\t");
    }
}
}