day6——java方法

java方法详解

一、何为方法(method)

java方法是语句的集合,它们在一起执行一个功能。

  1. 方法是解决一类问题的步骤的有序组合
  2. 方法包含于类或对象中
  3. 方法在程序中被创建,在其他地方被引用

设计方法的规则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展。

方法的命名规则:首字母小写后面跟驼峰规则

语法形式:

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

说明:

  1. 修饰符:告诉编辑器如何调用该方法,定义了该方法的访问类型(可选的);

  2. 返回值类型:

    • 返回啥数据类型写啥类型;
    • 空则写 void(没有返回值)
  3. 方法名:方法的实际名称;

  4. 参数类型:(可选的)

    • 形参:接收输入的数据;
    • 实参:传入给方法的数据;
  5. 方法体:具体实现功能的语句;

方法调用:对象名.方法名(实参列表)

int sum = add(1, 2);//返回一个值
System.out.println(sum);//void(没有返回值)一条语句

值传递:直接传递-->一改变内容代表

引用传递:指向内容的的地址,改变内容只是改变引用的地址,原来的对象换在(没有被任何引用所指向的对象都是垃圾,会被垃圾回收器回收)

二、方法的重载

重载就是一个类中,有相同的函数名称,但形参不同的函数;

规则:

  1. 方法名称必须一样。
  2. 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同)。
  3. 方法的返回类型可以相同也可以不同。
  4. 仅仅返回类型不同不足以称为方法的重载。
public class Demo02 {
    public static void main(String[] args) {
        double max = max(10.0,20.0);
        System.out.println(max);
    }

    //比大小
    public static double max(double num1,double num2){
        double result = 0;
        //判断
        if (num1==num2){
            System.out.println("num1==num2");
            return 0;//终止方法
        }
        if (num1>num2){
            result = num1;
        }else{
            result = num2;
        }
        return result;
    }

    //比大小
    public static int max(int num1,int num2){
        int result = 0;
        //判断
        if (num1==num2){
            System.out.println("num1==num2");
            return 0;//终止方法
        }
        if (num1>num2){
            result = num1;
        }else{
            result = num2;
        }
        return result;
    }
}

三、命令行传参(了解)

运行一个程序时候再传递给他消息,这就要靠传递命令参数给main()函数实现;

public class Demo03 {
    public static void main(String[] args) {
        //args.length 数组长度
        for (int i = 0; i < args.length; i++) {
            System.out.println("arg["+ i +"]:" + args[i]);
        }
    }
}

四、可变参数(了解)(不定项参数)

①:在方法声明中,在指定参数类型后加入一个省略号(...)

②:一个方法中只能指定一个可变参数,它必须是方法的最后一个参数

public class Demo04 {
    public static void main(String[] args) {
        Demo04 demo04 = new Demo04();
        demo04.test(1,3,4,5,6);

        System.out.println("========================");

        //调用可变参数的方法
        printMax(34,3,3,2,56,5);
        printMax(new double[]{1,2,3});

    }

    public  void  test(int x,int... i){
        System.out.println(x);
        System.out.println(i[0]);
        System.out.println(i[1]);
        System.out.println(i[2]);
        System.out.println(i[3]);
    }


  public static void printMax(double... numbers){
        if (numbers.length==0){
            System.out.println("No argument passed");
            return;
        }
        double result = numbers[0];
        //排序
         for (int i = 0; i < numbers.length ; i++) {
             if (numbers[i] > result){
                 result = numbers[i];
             }
          }
         System.out.println("The max value is "+result);
  }
}

五、递归

自己调用自己;

递归结构:

  1. 递归头:什么时候不调用自身的方法。如果没有头,将陷入死循环;
  2. 递归体:什么时候需要调用自身方法;

注:递归基数太多的话会占用大量内存,容易造成系统崩溃,所以次数多的话不要用。

public class Demo06 {
    //2! =2*1
    //3! =3*2*1
    //5! =5*4*3*2*1
    public static void main(String[] args) {
        System.out.println(f(4));
    }
    public static int f(int n){

        if (n == 1) {
             return 1;
        }else{
            return n*f(n-1);
        }

    }
}
原文地址:https://www.cnblogs.com/liustudy/p/14032430.html