Java基础——方法

一、方法

1.1 什么是方法

📚 定义:

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

💡 类比:

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

核心作用:

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

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

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

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

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

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

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

1.3 方法的注意事项

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

1.4 方法的重载

📚 定义:

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

✅ 重载规则:

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

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

java 复制代码
// ❌ 错误:参数相同,只有返回值不同
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)
  • 基本数据类型(如 int, double):传递的是值的拷贝
  • 修改不会影响原变量。
java 复制代码
public void changeValue(int x) {
    x = 100;
}

int num = 5;
changeValue(num);
System.out.println(num); // 输出:5(未改变)
✅ 引用传递(Pass by Reference)
  • 对象引用类型(如 String, Array, Object):传递的是引用的拷贝
  • 可以修改对象内容,但不能改变引用本身。
java 复制代码
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 类:

类别 数据类型 占用内存 取值范围 默认值
整数型 byte 1 字节 -128 ~ 127 0
short 2 字节 -32,768 ~ 32,767 0
int 4 字节 -2³¹ ~ 2³¹-1 0
long 8 字节 -2⁶³ ~ 2⁶³-1 0L
浮点型 float 4 字节 约 ±3.4×10³⁸(6~7位有效数字) 0.0f
double 8 字节 约 ±1.7×10³⁰⁸(15位有效数字) 0.0
字符型 char 2 字节 \u0000 ~ \uffff(0 ~ 65535) '\u0000'
布尔型 boolean 不固定(JVM决定) true / false false

1.6.2 引用数据类型

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

📦 包括以下几类:

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

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

相关推荐
萧瑟余晖2 小时前
JDK 26 新特性详解
java·开发语言
马优晨2 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
fthux2 小时前
“装闭”,让装修套路“装”不下去
人工智能·ai·开源·github·open source
a1117763 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
人邮异步社区4 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大4 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai5 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说5 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
破碎的南瓜5 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql
এ慕ོ冬℘゜5 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript