欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中方法定义,递归和重载

程序员文章站 2024-03-25 23:55:34
...

什么是方法?

方法用于定义类的某种行为(或功能),其语法结构如下:

 访问控制符 [修饰符] 返回值类型 方法名( [参数] )  {
 
            //方法体
 
 }

访问控制符:
1.访问控制符分为四种:public、protected、友好的和private
2.方法中的访问控制符用于限制方法在其他类中的使用范围。
修饰符:
static修饰符用于限制方法的调用方式:
1、static修饰的方法可以直接使用类名调用也可以使用类创建的对象调用;
2、非static修饰的方法只能使用类创建的对象调用。

其它常用方法修饰符有final和synchronized

返回值类型:
1.如果方法没有返回值,需要用void表示。
2.方法返回基本数据类型的数据,则返回值类型必须是返回数据所属的数据类型或者精度更高的数据类型(针对于数值类型的数据)。
3. 方法返回引用数据类型的数据,则返回值类型必须是返回数据所属的数据类型或者其父类。
4. 方法如果有返回值,则必须借助return关键字将数据返回;
方法名:

  1. 遵循标识符命名规则;首字母必须小写,如果由多个单词组成,从第二个单词开始首字母必须大写;
  2. 方法名一般由一个动词或者动名词构成。
    例:
 void printInfomation(){
   System.out.println("HelloWorld");
 }

参数:
1.方法可以有多个参数,各个参数之间用逗号(,)间隔。
2.方法的参数在整个方法内有效。
3.方法参数前面的数据类型用于限制调用方法时所传具体数据的数据类型;
例:

 int multiplication(int x, int y){
   int result = x*y;
  return result;
 }

动态参数:
1、动态参数实质为数组;
2、动态参数必须位于参数列表的最后;
3、一个方法只能有一个动态参数;
例:

 public class Test {
 
  public static void print(int... numbers) {
   for (int number : numbers) {
    System.out.println(number);
   }
  }
 
  public static void main(String[] args) {
   print(1, 2, 3, 4, 5);
  }
 }

方法递归:
方法递归是指一个方法在它的方法体内调用它自身。
1、在递归调用中,主调方法同时也是被调方法;
2、递归的关键是有结束递归的时机;

public class Test{
 
  /**
   * 求n的阶乘
   */
  static long factorial(int n) {
   if(n == 1) {//判断条件,一旦满足就不再递归,逐层返回
    return 1;
   }else{
    return n*factorial(n - 1);
   }
  }
  
  public static void main(String[] args) {
   System.out.println(factorial(5));
  }
 }

方法重载:

1.同一个类中有多个方法名相同但参数列表不同的方法,这种现象称为方法重载(overload)。其中参数列表不同包括以下情形:

              1、参数的个数不同 
              2、参数的对应类型不同 

2.参数列表不同并不包含参数名不同,也就是说如果方法名相同,方法中参数个数和类型相同,只是参数名不同,这样也不能称之为方法重载。
3.方法中其它构成部分不参与比较:访问控制符、修饰符、返回值类型。
4. 一个类中有多个同名方法(构造方法或普通方法),在调用这些方法时,到底调用哪个方法取决于调用方法时传入的参数的数据类型和个数。

 public class Teacher {
 
  public static void print(int age, String name) {
   System.out.println(age + "," + name);
  }
 
  public static void print(String name, int age) {
   System.out.println(name + "," + age);
  }
 
  public static void main(String[] args) {
   print(33, “王小红”);// 依次传入int类型和String类型数据,所以调用第一个方法
   print("王小红", 33);//依次传入String类型和int类型数据,所以调用第二个方法
  }
 }