Java基础——方法 - 详解

一、方法

1.1 什么是方法

定义:

方法(Method) 是一段可重复执行的代码块,用于实现特定功能或行为。它是 Java 程序中组织逻辑、提高复用性和模块化的重要手段。

类比:

  • 就像厨房里的“菜谱”,每道菜对应一个方法;
  • 调用方法就像“做菜”,传入食材(参数),得到成品(返回值)。

 核心作用:

  • 封装功能:将复杂逻辑隐藏起来;
  • 提高复用性:避免重复写相同代码;
  • 增强可读性:通过方法名表达意图;
  • 支持参数传递与返回结果

1.2 最简单的方法定义和调用

[修饰符] 返回值类型 方法名([参数列表]) {
    // 方法体:执行的具体代码
    [return 返回值;]
}

1.2.1 最简单的方法定义和调用

方法名要遵守骆驼峰命名法

1.2.2 带参数的方法定义和调用

1.2.3 带返回值的方法定义和调用

1.3 方法的注意事项

  • 方法必须定义在类内部;
  • 如果方法没有返回值,不能写 return 表达式(但可以写 return; 提前退出);
  • 参数是形式参数(形参),实际调用时传入的是实际参数(实参)。

1.4 方法的重载

定义:

方法重载是指在一个类中可以定义多个同名但参数不同的方法。Java 会根据调用时的参数类型和个数自动选择合适的方法。

✅ 重载规则:

  • 方法名必须相同;
  • 参数列表必须不同(类型、个数、顺序至少有一个不同);
  • 返回值类型不影响重载判断
  • 访问修饰符和异常声明不影响重载。

public class MathUtils {
    // 重载1:两个整数相加
    public int add(int a, int b) {
        return a + b;
    }
    // 重载2:两个浮点数相加
    public double add(double a, double b) {
        return a + b;
    }
    // 重载3:三个整数相加
    public int add(int a, int b, int c) {
        return a + b + c;
    }
    // 重载4:字符串拼接
    public String add(String a, String b) {
        return a + b;
    }
}

❌ 错误示例(不构成重载):

// ❌ 错误:参数相同,只有返回值不同
public int add(int a, int b) { ... }
public double add(int a, int b) { ... } // 编译错误!
// ❌ 错误:参数类型相同,顺序不同(但 Java 不区分顺序)
public int add(int a, double b) { ... }
public int add(double a, int b) { ... } // 编译错误!

✅ 重载优势:

  • 提高代码灵活性;
  • 同一功能支持多种输入方式;
  • 更符合自然语言习惯(如 add(1,2) 和 add("a","b"))。

1.5 方法的内存

执行流程:
  1. 调用方法时,创建一个新的栈帧(Stack Frame)
  2. 栈帧包含
    • 方法参数;
    • 局部变量;
    • 返回地址;
    • 操作数栈(用于执行指令);
  3. 方法执行完毕后,栈帧被销毁,返回值传递给调用者。

进栈区出栈区:

✅ 关键点:

  • 每次方法调用都会在栈上压入一个新栈帧
  • 方法执行完后,栈帧弹出,局部变量消失;
  • 基本类型参数是值传递,引用类型是引用传递(即传递对象引用)。

参数传递机制

✅ 值传递(Pass by Value)
  • 基本数据类型(如 intdouble):传递的是值的拷贝
  • 修改不会影响原变量。
public void changeValue(int x) {
    x = 100;
}
int num = 5;
changeValue(num);
System.out.println(num); // 输出:5(未改变)

✅ 引用传递(Pass by Reference)
  • 对象引用类型(如 StringArrayObject):传递的是引用的拷贝
  • 可以修改对象内容,但不能改变引用本身。
public void modifyArray(int[] arr) {
    arr[0] = 999; // 修改数组内容
    arr = new int[]{1, 2}; // 改变引用指向(不影响外部)
}
int[] data = {1, 2, 3};
modifyArray(data);
System.out.println(data[0]); // 输出:999(内容被改)

✅ 总结:
Java 中所有参数都是“值传递”,但对象类型传递的是“引用的值”,因此可以修改对象内部状态。



*1.6 区分基本/引用数据

1.6.1 基本数据类型

由 Java 语言内置支持的简单数据类型,直接存储实际的值,不包含方法(但可通过包装类扩展功能)。

共 8 种,分为 4 类:

类别数据类型占用内存取值范围默认值
整数型byte1 字节-128 ~ 1270
short2 字节-32,768 ~ 32,7670
int4 字节-2³¹ ~ 2³¹-10
long8 字节-2⁶³ ~ 2⁶³-10L
浮点型float4 字节约 ±3.4×10³⁸(6~7位有效数字)0.0f
double8 字节约 ±1.7×10³⁰⁸(15位有效数字)0.0
字符型char2 字节\u0000 ~ \uffff(0 ~ 65535)'\u0000'
布尔型boolean不固定(JVM决定)true / falsefalse

1.6.2 引用数据类型

用于引用(指向)对象的数据类型。变量本身不存储对象内容,而是存储对象在堆内存中的地址(引用)

包括以下几类:

  1. 类(Class):如 StringScanner, 自定义类等;
  2. 接口(Interface):如 ListRunnable
  3. 数组(Array):如 int[]String[]
  4. 枚举(Enum)
  5. 包装类(Wrapper Classes):如 IntegerDouble(用于基本类型的对象表示)。

课程学习来源于-B站@itheima!

posted @ 2025-12-11 18:21  yangykaifa  阅读(0)  评论(0)    收藏  举报