10. Java 方法定义/形参/实参/返回值/语句块/方法重载

语句块

  1. 语句块(复合语句)是用花括号起的任意数量的简单 Java 语句。
  2. 块确定了局部变量的作用域。块中的程序代码,作为一个整体,是要被一起执行的。
  3. 块可以被嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量。
  4. 语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块中定义变量的作用域只限于语句块。

代码示例:语句块中定义变量

// 测试语句块
public class TestLan {
    public static void main(String[] args) {
        int n;
        int a;
        {
            int k; 
            int n; // 编译错误:不能重复定义变量 n
        }   // 变量 k 的作用域到此为止
    }
}

方法

  1. 方法是一段用于完成特定功能的代码片段,类似于其他语言的函数。
  2. 方法用于定义该类相关实例的行为特征和功能实现。方法是类和对象行为特征的抽象。方法类似于面向过程中的函数。
  3. 面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。
  4. 面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。

方法声明格式:

[修饰符1 修饰符2 ……]   返回值类型   方法名(形式参数列表){
    Java语句:… … …
}

方法调用方式:

对象名.方法名(实参列表)
方法的详细说明:

  1. 形式参数(定义方法时写的):在方法声明时用于接收外界传入的数据。
  2. 实参(调用方法时写的):调用方法时实际传给方法的数据。
  3. 返回值:方法在执行完毕后返还给调用它的环境的数据。
  4. 返回值类型:事先约定的返回值的数据类型。如无返回值,必须显示指定为 void。

代码示例:定义方法、调用方法

// 定义方法、调用方法
public class TestMethod {
    public static void main(String[] args) {
        // 定义方法对象
        TestMethod tm = new TestMethod();
        // 通过对象调用普通方法
        tm.printSxt();
        // 通过对象调用无返回值的参数方法
        tm.add(30,40,50);
        // 通过对象调用带有返回值的参数方法:计算数字
        int c = tm.add1(10,20,30) + 100;
        System.out.println("计算数字的结果:" + c);
    }

    // 加 void :代表打印时不需要去返回任何东西。并且定义方法时没有定义形参
    void printSxt(){
        System.out.println("打印了 Sxt");
        System.out.println("阿jun还没对象。2021年11月1日。");
    }

    // 无返回值的参数方法
    void add(int a,int b,int c){
        int sum =  a + b + c;
        System.out.println("调用参数方法的计算结果:" + sum);
    }

    // 有返回值的参数方法。在参数方法前方定义返回值的数据类型。
    int add1(int a,int b,int c){
        int sum = a + b + c;
        // 定义 add1 方法返回值
        return sum;    // return 作用:1.结束方法的运行 2.返回值
    }
}

小知识

  1. return 作用:(1)结束方法的运行。(2)指定返回值(不会主动去打印返回值)。
  2. 实参的数目、数据类型和次序必须和调用的方法声明的形式参数列表匹配。
  3. Java 中进行方法调用传递参数时,遵循值传递的原则(传递的值都是数据的副本)(副本即会在调用方法给的实参值 copy 一份赋值给对应方法的形参)。
  4. 基本类型传递的是该数据值的 copy 值。
  5. 引用类型传递的是该对象引用的 copy 值,但指向的是同一个对象。

方法的重载(overload)

重载的方法,实际是完全不同的方法,只是名称不同而已。

雷区:方法重载

方法重载的构成条件:

  1. 不同的含义:形参类型、形参个数、形参顺序不同。
  2. 只有返回值不同不构成方法的重载。
    形如:只有返回值不同
int a(String str)(){} 与 void a(String str)(){}
  1. 只有形参的名称不同,不构成方法的重载。
    形如:只有形参名不同
int a(String str)(){} 与 int a(String s)(){}

代码示例:方法重载

// 测试方法重载
public class TestOverload {
    public static void main(String[] args) {
        // 重载不同的调用方法
        System.out.println(add(3,5));   // 结果为 8
        System.out.println(add(3,4,5)); // 结果为 12
        System.out.println(add(3.05,5));// 结果为 8.05
        System.out.println(add(3,5.05));// 结果为 8.05
        // 常见的一些方法的重载
        System.out.println();       // 0 个参数
        System.out.println(1);      // 参数是一个 int
        System.out.println(2.0);    // 参数是一个 double(因为 float 需要 f/F 去声明,所以是 double)
        System.out.println("cc");   // 参数是一个字符串
    }
    // 求和的方法
    public static int add(int n1,int n2){
        int sum = n1 + n2;
        return sum;
    }
    // 方法名相同,参数个数不同,构成重载
    public static int add(int n1,int n2,int n3){
        int sum = n1 + n2 + n3;
        return sum;
    }
    // 方法名相同,参数数据类型不同,构成重载
    public static double add(double n1,int n2){
        double sum = n1 + n2;
        return sum;
    }
    // 方法名相同,参数定义类型顺序不同,构成重载
    public static double add(int n1,double n2){
        double sum = n1 + n2;
        return sum;
    }
    /**
     * 方法名相同,相同类型参数位置顺序不同,不构成重载。
     * 形如:int add(int n1,int n2){} 与 int add(int n2,int n1){}
     * 只有返回值不同(即只有定义方法返回值数据类型不同),不构成方法的重载。
     * 形如:int add(int n1,int n2){} 与 double add(int n1,int n2){}
    */
}

至此,Java 方法相关知识点结束。

posted @ 2021-11-01 17:32  阿jun  阅读(236)  评论(0)    收藏  举报