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!

相关推荐
catchadmin2 小时前
PHP 依赖管理器 Composer 2.9 发布
开发语言·php·composer
q***71852 小时前
海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
java·前端·spring boot
_Jimmy_2 小时前
JUC包里的同步组件主要实现了AQS的哪些主要方法
java
范纹杉想快点毕业2 小时前
《嵌入式开发硬核指南:91问一次讲透底层到架构》
java·开发语言·数据库·单片机·嵌入式硬件·mongodb
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于Python的Bilibili平台数据分析与可视化实现为例,包含答辩的问题和答案
开发语言·python·数据分析
StarPrayers.2 小时前
自蒸馏学习方法
人工智能·算法·学习方法
芝麻馅汤圆儿2 小时前
c文件编译
c语言·开发语言
p66666666682 小时前
STM32-bootloader引导程序跳转机制笔记
笔记·stm32·嵌入式硬件
千疑千寻~2 小时前
【Qt】QT的程序打包
开发语言·qt