Java基础08——方法

Java基础08——方法

方法–基本概念

**方法:**是一种语法结构,用于完成特定功能的代码片段。

理解:可以把一段代码封装成一个功能,以便重复调用。

​ 方法的知识方法点要涉及到方法声明,方法调用,方法参数和方法的返回值

**代码片段:**由一行或多行代码组成,由{}括起来

方法声明

**方法声明:**包括方法头和方法体两部分。

方法头用于确定方法的名称、形式参数的语法解析:名称和类型、返回值的类型和访问限制。

返回值类型  方法名([参数列表]) [throws]
                    返回值类型: void 表示没有返回值

**方法体:**方法体是一段代码块(完成功能的代码片段),用于执行方法的具体操作。方法的局部变量和语句都定义在方法体内部。

语法规则

[修饰符] 返回值类型 方法名([参数列表]){
    //方法体(需要执行的功能代码)
    return 返回值;
}
  • **方法修饰符:**是一种关键字,用于修饰类、方法、变量等各种程序元素的声明。主要有以下几种类型

    • 访问修饰符: 用于控制程序元素的访问权限,包括 public、protected、private 和默认(不写任何修饰符) 四种。
    • 非访问修饰符:用于控制程序元素的行为,包括 static、final、abstract、synchronized、volatile 等
    • 其他修饰符:包括 transient、native、strictfp 等
  • **返回值类型:**表示当前方法执行完成后返回的运算结果的数据类型。

    • 方法运行后输出的运行结果,一个方法只能返回一个值,

    • 返回的结果类型就是声明时设置的类型,return 值;
    • 值的类型必须和声明的类型一致

    • 如果方法没有返回值,使用 void 关键字声明。
    • 对于有返回值的方法,其方法体中至少有一条 return 语句,形式如下:return 表达式;

      当调用该方法时,方法的返回值就是 return 后面的表达式

    • 如果方法声明了返回值,那么方法就必须返回值
    • 主调方法接收返回值 主调方法使用 = 运算符接收方法返回值

  • **方法名:**每个方法都有其名称,称为方法名。

  • **参数列表:**可以理解为调用方法的前提条件。

    • 方法参数可以有多个参数,每个参数都需要声明类型,声明的参数(形参),相邻的两个参数之间用逗号隔开。
    • 调用有参方法时,必须按照参数列表的类型。
    • 顺序依次传入参数才可调用,传入的参数是实际参数(实参)
    • 传递的参数的个数和数据类型方法也可以没有参数,称为无参方法。

方法执行

1.正常执行:

目前方法正常执行结束有三种情况:

  • 所有代码正常执行
  • 执行了 return 语句
  • System.exit(value);【特例】

2.异常执行结束

  • 代码执行过程中发生异常

注意:

  • 方法定义完成后不会主动执行,执行方法需要被调用
  • main 方法,单个 java 类型程序的入口
  • 在Java 中,一个程序元素可以同时拥有多个修饰符,它们的顺序可以任意排列。

    例如一个方法可以同时使用 public、static、final、synchronized 等多个修饰符来限定它的访问权限、行为和线程安全性。

  • 方法名称要符合标识符命名规则,不要与 Java 中的关键字重名,最好做到见名知意
  • return 返回值的类型必须与方法声明的返回值类型一致
  • 方法不能嵌套,不能在一个方法中声明另外一个方法。
  • 方法区在JVM启动时创建

  • 方法重载会根据参数列表来决定调用哪个方法。不定长参数优先级低

方法的调用

方法之间可以相互调用:

  1. 目前我们是在 main 方法区调用方法,被调用的方法需要使用 static 修饰

  2. static 方法只能直接调用 static 方法

  3. static方法调用使用 类名.方法名()调用。

调用同一个类中的方法,可以直接写方法名();

  1. 一个方法可以被多次调用
目前我们定义的方法都有 static,我们将其称为静态方法(类方法)

方法设计原则: 方法要具有单一职责(性),一个方法只办一件事,如果有多件事要做,就设计多个方法

**主调方法:**发出调用的方法

**被调方法:**被调用的方法

**强调:**被调方法执行过程中,主调方法处于阻塞状态,当被调方法执行结束后,程序执行返回到主调方法,主调方法停止阻塞,继续执行

举例:

  • 无参无返回:输出 1 ~ 100 间所有的偶数
public class Demo02 {

    public static void main(String[] args) {
        evenNumber();   // 直接用 `方法名()`调用
    }

    // 方法声明--无参无返回
    public static void evenNumber(){
        for (int i = 1; i < 100; i++) {
            if (i % 2 == 0){
                System.out.println(i);
            }
        }
    }
}
  • 有参有返回(请看以下重载和不定长参数例题)

跨类调用方法

以static为例 —>类名.方法名()

  1. 如果被调用方法所在的类和调用方法的类在同一个包下则不需要导包
  2. java.lang包下的类都不需要导包
  3. 其他情况需要先导类所在的包再使用

方法执行

方法参数传递规则:按照类型、个数、顺序一致原则传递参数

实参与形参:主调方法的实参传递给被调用方法的形参

对参数的理解:被调方法运行前,需要从主调方法得到的数据,是方法运行的前提条件

方法重载

**方法的重载:**在一个类中有多个方法名相同的方法,这些方法的参数列表不同( 个数、类型、顺序不同).两个方法互为重载(overload)方法

举例:

 public static void main(String[] args) {
        int sum = sum(1,2);
        sum = sum(3,sum); // sum = sum(3,sum(1,2));
        System.out.println(sum); // 6
        
    }
    public static int sum(int a,int b){
        return a + b;
    }
    public static double sum(double n1,double n2,double n3){
        return n1 + n2 + n3;
    }

Notes:

  • 方法重载的优先级最低
  • 方法重载与返回值类型无关

可定长度参数/不定长参数

可变长度参数/不定长参数:

  • 此时调用方法可以不传参,也可以传 1 个或 N 个整数
  • 不定长参数要放在参数列表的最后一个, 一个方法只能有一个不定长参数
  • 不定长参数使用时类似于数组
 public static void main(String[] args) {
        int s = sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        System.out.println(s);  // 55
    }

    public static int sum(int ... n){
        System.out.println("int sum(int... n)");
        int sum = 0;
        for (int i = 0; i < n.length; i++) {
            sum += n[i];
        }
        return sum;
    }

可变长度参数和数组的区别:

  • 数组作为参数必须要传值,可变长度参数则不一定

  • 可变长度参数只能用于参数列表的最后一个,数组则不一定

  • 可变长度参数只能在参数列表出现,数组可以定义局部变量

  • 数组参数和可变长度参数可以同时在同一个方法的参数列表中出现

  • 参数列表只有数组和可变长度参数不同时不是重载方法(不能同时出现)
  • 可变长度参数可以接收数组,但数组不一定

public static void main(String[] args) {
        int[] n = new int[]{1, 2, 3, 4};
        int sum = sum(n);
        System.out.println(sum);  // 10
    }
    public static int sum(int[] nums){
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        return sum;
    }
    
//    public static int sum(int... nums){
//        int sum = 0;
//        for (int i = 0; i < nums.length; i++) {
//            sum += nums[i];
//        }
//        return sum;
//    }
java中只有值传递(值和地址都是值)

Notes:

  • 方法的可变参数是指:方法参数的个数可变
  • 可变参数的标志是三个点
  • 可变参数必须是方法的最后一个参数
  • 可变参数实际上是一个数组
  • 可以向可变参数传入数组和或者散列值
  • 一个方法只能有一个可变参数

**递归:**方法自己调用自己,要在方法体内存在结束调用的条件

方法-变量作用域和生命周期

  1. 方法的形参是方法内的局部变量
  2. 作用域:方法内的局部变量只能在方法内部使用,方法外部超出了方法变量的作用域,不能使用
  3. 生命周期:方法内的局部变量在方法调用时申请内存,在方法调用结束后回收

你可能感兴趣的:(Java基础,java,java,开发语言)