Java学习day06

方法

1.方法的概念

方法的概念:一些列代码指令的集合,用于实现特定的功能,可以被反复调用

3.方法的定义

public static void 方法名称(){

​ //方法体

}

3.方法的调用

在需要调用方法的位置,直接书写方法名即可

方法书写完毕后,必须调用才会执行,我们可以通过debug模式观察方法调用执行的过程

package com.linx.demo.demo1;

/**
 *      方法:
 *          概念:一系列代码指令的集合,用于实现特定的功能,可以被反复调用
 *          调用:在需要使用方法的位置 直接书写方法名即可
 *
 */
public class Test1<printSign, printSign2> {
    public static void main(String[] args) {
        System.out.println("空山新雨后,");
        System.out.println("天气晚来秋。");
        System.out.println("明月松间照,");
        System.out.println("清泉石上流。");

        printSign2(16);
        int a = 19;
        printSign2(a);
        int b = 3;
        printSign2(a-b);

        System.out.println("长安一片月,");
        printSign1();

        System.out.println("万户捣衣声。");
        printSign1 ();

        System.out.println("秋分吹不尽,");
        printSign1();

        System.out.println("总是与关情。");
        printSign1();
    }

    //定义方法打印空格和换行
    public static void printSign1(){
        for (int i = 0; i < 10; i++) {
            System.out.print("-");
        }
        System.out.println();
    }

   
}

4.参数

多数情况下,方法与调用者之间需要数据的交互;调用者必须提供必要的数据,才能使方法完成相应的功能。

形参:是指在方法定义的时候书写的参数

​ 形参规定了参数的个数、类型、顺序,要求调用者在调用方法时必须传入与形参相同的个数、类型、顺序的实参

实参:实际参数 调用方法时传入的参数

4.1单个参数

 /**
     * 带参数方法
     * @param num
     */
    public static void printSign2(int num){
        for (int i = 0; i < num; i++) {
            System.out.print("=");
        }
        System.out.println();
    }

4.2多个参数

我们可以使用多个参数 来增加方法的灵活性

package com.linx.demo.demo2;

/**
 * 方法多个参数
 */
public class Test1 {
    public static void main(String[] args) {
        System.out.print("空山新雨后");
        printSign(1,",");

        System.out.print("天气晚来秋");
        printSign(1,"。");

        System.out.print("明月松间照");
        printSign(1,",");

        System.out.print("清泉石上流");
        printSign(1,"。");

        printSign(15,"=");
        printSign(15,"=");


        System.out.print("长安一片月");
        printSign(1,",");
        printSign(1,",");

        System.out.print("万户捣衣声。");
        printSign(1,"。");

        System.out.print("秋分吹不尽,");
        printSign(1,",");

        System.out.print("总是与关情。");
        printSign(1,"。");

    }
    public static void printSign(int number,String sign){
        for (int i = 0; i < number; i++) {
            System.out.print(sign);
        }
        System.out.println();
    }
}

5.返回值和返回类型

如果方法执行完毕后,需要放回具体的数据,需要用return关键字来返回

  1. 方法定义的时候返回值类型 写为具体的返回数据类型(任何类型都可以写)
  2. 方法最终使用return关键字返回的的数据,必须和方法声明时书写的类型保持一致

return关键字表示中断方法并且返回内容

package com.linx.demo.demo2;

/**
 * 返回值和返回类型
 */
public class Test1 {
    public static void main(String[] args) {
       Scanner input = new Scanner(System.in);
        
        
        System.out.print("请输入动物名:");
        String name = input.next();
        
        System.out.print("请输入该动物的年龄(整数):");
        int age = input.nextInt();
        
        aiInfo(name,age).printInfo();

    }
    public static animal aiInfo(String s,int a){
        animal a1 = new animal(s,a);
        return a1;
    }
}

class animal{
    private int age;
    private String name;

    public animal(String name,int age) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public  void printInfo(){
        System.out.println("该动物的名称是:"+name+"\t年龄是:"+age);
    }
}

6.return关键字的其他用法

  1. return关键字在分支结构中使用,必须保证每一条分支都有正确的返回值返回
  2. 在返回值类型为void的方法中 依然可以使用return 此时return关键字之后不能加任何内容
package com.linx.demo.demo2;

import java.util.Scanner;

/**
 * 方法多个参数
 */
public class Test2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("请输入你追逐时长:");
        double time = input.nextDouble();


        System.out.print("请输入你花费的money数:");
        double money = input.nextDouble();

        if(checkSucess(time,money)){
            System.out.println("恭喜你抱得女神归!");
        }else{
            System.out.println("抱歉,你还没有舔到位,继续加油吧!!");
        }
    }

    public static boolean checkSucess(double time,double money){
        if(time*money >= 1000000){
            return true;
        }else{
            return false;
        }
    }
}

package com.linx.demo.demo3;

/**
 *      在返回值类型为void的方法中 依然可以使用return  此时return关键字之后不能加任何内容
 *      此时return只表示中断方法
 */
public class Test1 {
    public static void main(String[] args) {
        m1();
    }

    public static void m1(){
        for (int i = 0; i < 10; i++) {
            if(i == 4){
                return;
//                break;
            }
            System.out.println("for循环内部");//return只能执行到这里
        }
        System.out.println("zhgelishifor循环外部");//break可以执行到这里
    }
}

7.方法重载

方法重载:同一个类中,方法名相同,参数列表不同(参数的个数、类型、顺序),即可称之为方法重载 overload

方法重载的优点:屏蔽使用差异,提高阅读性,扩展性

如 :编写一些方法实现多个数的加法计算

package com.linx.demo.demo3;

/**
 *      方法重载
 *      含义:
 *          同一个类中方法名相同
 *          参数列表不同(个数、类型、顺序) 即为方法重载
 *       优点:屏蔽使用差异 提高阅读性、扩展性
 */
public class Test2 {
    public static void main(String[] args) {
        int a = 1;
        int b = 1;
        int c = 1;
        int d = 1;

        System.out.println( "a+b="+ add(a,b));
        System.out.println("a+b+c="+add(a,b,c));
        System.out.println("a+b+c+d="+add(a,b,c,d));



    }

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

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

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

}

8.多级调用

方法与方法之间可以互相调用,直接书写方法名即可(注意别死循环)

package com.atguigu.test8;

/**
 * @author WHD
 * @description TODO
 * @date 2022/7/12 16:29
 *  多级调用
 */
public class Test1 {
    public static void main(String[] args) {
        m1();
    }

    public static void m1(){
        System.out.println("m1 method start");
        m2();
        System.out.println("m1 method end");
    }

    public static void m2() {
        System.out.println("m2 method start");

        System.out.println("m2 method end");
    }
}

9.递归

递归: 递归属于将一个复杂的问题拆分成简单的哥哥小问题

递归的两个必要条件:

​ 1.当前问题可以拆分为小的问题

​ 2.必须有递归的出口(回归的条件)

package com.linx.demo.demo4;

import java.util.Scanner;

/**
 *      递归():属于将一个复杂的问题 拆分为简单的各个小问题
 *          递归的两个必要条件:
 *              1.当前问题可以拆分为小的问题
 *              2.必须有递归的出口(回归条件)
 *
 */
public class Test1 {
    public static void main(String[] args) {
        Scanner input =new Scanner(System.in);

        int i;
        do{
            System.out.print("请输入你要求的阶乘数(0退出):");
            i= input.nextInt();
            System.out.println(i+"的阶乘是:"+getFactoria(i));
            System.out.println();
        }while(i != 0);

        System.out.println("程序结束!");
    }

    private static int getFactoria(int i) {
        if(i==1){
            return i = 1;
        }
        return i*getFactoria(i-1);
    }
}
posted @ 2022-07-12 19:05  木0_0木  阅读(39)  评论(0)    收藏  举报