3. 方法

方法

本文是整理狂神说Java系列课程笔记
教程来源:B站up:遇见狂神说

什么是方法

  • 在Java中,方法是语句的集合,它们在一起执行一个功能。
    • 方法是解决一类问题的步骤的有序组合
    • 方法包含在类或对象中
    • 方法在程序中被创建,在其他地方被引用
  • 设计方法的原则:方法的本意是功能块,就是实现,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性。也就是说,一个方法只能完成一个功能,这样利于我们后期的扩展

例如:常用的System.out.println()对应的就是类.函数.方法()

方法的定义

  • Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:

    • 方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

      • 修饰符:修饰符是可选项,其作用是告诉编译器如何调用该方法。定义了该方法的访问类型。

      • 返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType的关键字是void

      • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名

      • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

        • 形式参数:在方法被调用时用于接收外界输入的数据
        • 实参:调用方法时实际传给方法的数据
        package method;
        
        public class Demo01 {
                  
                  
            // main方法
            public static void main(String[] args) {
                  
                  
                System.out.println(add(4,9));	// 4和9是实参
            }
            // 加法
            public static int add(int a, int b){
                  
                  
                return a+b;// a, b是形参
            }
        }
        
      • 方法体:方法体包含具体的语句,定义该方法的功能

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

方法的重载

  • 重载就是在一个类中,有相同的函数名称,但是新参不同的函数。

  • 方法的重载规则:

    扫描二维码关注公众号,回复: 15443517 查看本文章
    • 方法名称必须相同
    • 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)
    • 方法的返回类型可以相同也可以不相同
    • 仅仅返回类型不同不足以成为方法的重载
  • 实现理论:

    方法名称相同时,编译器会根据调用方法的参数个数、参数类型等特征逐个匹配,以选择对应的修改,如果匹配失败,则编译器报错。

命令行传参

有时候你希望一个程序在运行的时候再传递给它消息,这要靠传递命令行参数给main()函数来实现。

示例:

package Scanner;

public class Demo06 {
    
    
    public static void main(String[] args) {
    
    
        for (int i = 0; i < args.length; i++) {
    
    
            System.out.println("args["+i+"]:"+args[i]);
        }
    }
}

在IDEA中找到当前脚本所在的文件夹–>右键–>选择Open in terminal
在这里插入图片描述

首先需要在命令行中对脚本进行编译,直接在当前脚本的路径下面使用javac Demo06.java
在这里插入图片描述
编译成功后会在当前脚本目录下生成一个同名称的.class文件

返回上一级目录,然后进行命令行传参
在这里插入图片描述

可变参数

在很多情况下,对于一个方法来说,其所传入的参数是动态的,所以在编写程序的时候并不知道参数的规模(长度)

所以需要用可变参数来进行参数的定义

  • 在方法的声明中,在指定参数类型后面加一个省略号(…)
  • 一个方法中只能制定一个可变参数,它必须是方法的最后一个参数,任何普通的参数必须在它之前声明。

示例:

package method;

public class Demo04 {
    
    
    public static void main(String[] args) {
    
    
        Demo04 demo04 = new Demo04();
        demo04.test(1,2,3,4,5,5,6,6,7,7);
    }
    public void test(int... j){
    
    
        System.out.print(j[3]);
    }
}

递归

  • A方法调用B方法,很好理解。但是所谓“递归”,是指用A方法调用A方法,就是自己调用自己

  • 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

  • 递归结构包括两个部分:

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

作业

简单的计算器:

package method;

import java.util.Scanner;

/**
 * @author :gao fei
 * @version : 手写计算器v1.0
 */
public class Demo07 {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);
        while (true){
    
    
            System.out.println("请输入第一个数字:");
            double a  = scanner.nextDouble();
            System.out.println("请输入运算符:");
            String type = scanner.next();
            System.out.println("请输入第二个数字:");
            double b = scanner.nextDouble();
            switch (type){
    
    
                case "+":
                    System.out.println("结果为:"+plus(a,b));
                    continue;
                case "-":
                    System.out.println("结果为:"+subtract(a,b));
                    continue;
                case "*":
                    System.out.println("结果为:"+multiply(a,b));
                    continue;
                case "/":
                    System.out.println("结果为:"+divide(a,b));
                    continue;
                default:
                    System.out.println("运算符无效");
            }
        }
    }
    public static double plus(double...i){
    
    
        double result = i[0]+i[1];
        return result;
    }
    public static double subtract(double...i){
    
    
        double result = i[0]-i[1];
        return result;
    }
    public static double multiply(double...i){
    
    
        double result = i[0]*i[1];
        return result;
    }
    public static double divide(double...i){
    
    
        double result = i[0]/i[1];
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/kakangel/article/details/118498684
3.