方法的使用

简介: 方法的使用

1. 举例说明什么叫方法


我们利用面向对象的方式来说明什么叫做方法。


我们假设我们有一只猫,这个类型叫做cat类(这里运用到一些面向对象的内容,不用纠结),那么我们这只猫有那些属性呢?

我们假设它的名字叫做marry,年龄为2岁,颜色为白色。


那么它肯定还有一些行为对吧,比如跑,跳,叫,这些都是它的行为,我们称之为方法。


public class demo {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.speak();//speak()这就是方法,我们通过 . 来调用方法
    }
}
class Cat{
    String name ;
    int age ;
    String color;
    public void speak(){
        System.out.println("喵喵喵");
    }
}


2. 方法概念及使用


2.1 什么是方法(method)


方法就是一个代码片段. 类似于C 语言中的"函数"。方法存在的意义 ( 不要背 , 重在体会 ):

1. 是能够模块化的组织代码 ( 当代码规模比较复杂的时候 ).

2. 做到代码被重复使用 , 一份代码可以在多个位置使用 .

3. 让代码更好理解更简单 .

4. 直接调用现有方法开发 , 不必重复造轮子 .


比如我上述的例子,小猫 喵喵喵 就是一个方法。


1.2 方法定义


方法语法格式:


// 方法定义

修饰符 返回值类型 方法名称 ([ 参数类型 形参 ...]){

       方法体代码 ;

       [ return 返回值 ];

}

这个修饰符我们以后会有一章重点讲解,这里先不用理解。

示例: 实现一个两个整数相加的方法


public class Method{
// 方法的定义
    public static int add(int x, int y) {
    return x + y;
    }
}

当然啦,方法和C语言中的函数还是有很多不同的。

注意事项:


1. 修饰符:现阶段直接使用 public static 固定搭配

2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成 void

3. 方法名字:采用小驼峰命名

4. 参数列表:如果方法没有参数, () 中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开

5. 方法体:方法内部要执行的语句

6. 在 java 当中,方法必须写在类当中

7. 在 java 当中,方法不能嵌套定义

8. 在 java 当中,没有方法声明一说


1.3 方法调用的执行过程


方法调用过程


调用方法--->传递参数--->找到方法地址--->执行被调方法的方法体--->被调方法结束返回--->回到主调方法继续往下执行。

就好像做菜,干什么都需要一步一步得走。

注意事项

定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.

一个方法可以被多次调用.

举例:

public class Method {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("第一次调用方法之前");
        int ret = add(a, b);
        System.out.println("第一次调用方法之后");
        System.out.println("ret = " + ret);
        System.out.println("第二次调用方法之前");
        ret = add(30, 50);
        System.out.println("第二次调用方法之后");
        System.out.println("ret = " + ret);
    }
    public static int add(int x, int y) {
        System.out.println("调用方法中 x = " + x + " y = " + y);
        return x + y;
    }
}
// 执行结果
一次调用方法之前
        调用方法中 x = 10 y = 20
        第一次调用方法之后
        ret = 30
        第二次调用方法之前
        调用方法中 x = 30 y = 50
        第二次调用方法之后
        ret = 80


1.4 实参和形参的关系(重要)


这个和C语言中的一样,都是一个形参和一个实参,但是和C语言不一样的我们这里只有传值传递,没有了传址传递,具体的以后会细讲。

注意:在Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体

就拿C语言中比较经典的案例来说明,交换两个数的值


public class TestMethod {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        swap(a, b);
        System.out.println("main: a = " + a + " b = " + b);
    }
    public static void swap(int x, int y) {
        int tmp = x;
        x = y;
        y = tmp;
        System.out.println("swap: x = " + x + " y = " + y);
    }
}
// 运行结果
swap: x = 20 y = 10
        main: a = 10 b = 20


原因:在swap方法调用时,只是将实参ab中的值拷贝了一份传递给了形参xy,具体的解析可以参考之前的C语言。


2. 方法重载


2.1 为什么需要方法重载


比如:我们要求两个数相加,到后面我又需要去求三个、四个、五个数的相加,我不可能去取那么多名字,然后根据不同的名字去找方法,这样太辛苦了。


Java提供了便利,Java中允许同一类中有多个同名的方法的存在,但是要求形参列表不一致。

class 类名{ 
    public static int addInt(int x, int y) {
        return x + y;
    }
    public static double addDouble(double x, double y) {
        return x + y;
    }
}


切记啊,在同一类中的才叫重载。


注意:

1. 方法名必须相同

2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)

3. 与返回值类型是否相同无关


// 注意:两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的
public class TestMethod {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int ret = add(a, b);
        System.out.println("ret = " + ret);
    }
    public static int add(int x, int y) {
        return x + y;
    }
    public static double add(int x, int y) {
        return x + y;
    }
}
// 编译出错
Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int)
public static double add(int x, int y) {
        ^
        1 个错误


2.3 方法签名


在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可以定义方法名相同的方法呢?

方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。


L两个同名的方法假设命名为sum(_int,_int),程序就无法识别,而sun(_double,_double)就可以被区分开。


如下图所示:


9347e10158b846748677d96dad7fda04.png


方法签名中的一些特殊符号说明:

特殊字符 数据类型
V void
Z boolean
B byte
C char
S short
I int
J long
F float
D double
[ 数组(以[开头,配合其他的特殊字符,表述对应数据类型的数组,几个[表述几维数组)
L 引用类型,以L开头,以;结尾,中间是引用类型的全类名

3. 递归

递归的概念相信大家都懂,我也就不介绍了。

我们直接看例子:递归求 N 的阶乘


public static void main(String[] args) {
        int n = 5;
        int ret = factor(n);
        System.out.println("ret = " + ret);
        }
public static int factor(int n) {
        System.out.println("函数开始, n = " + n);
        if (n == 1) {
        System.out.println("函数结束, n = 1 ret = 1");
        return 1;
        } in
        t ret = n * factor(n - 1);
        System.out.println("函数结束, n = " + n + " ret = " + ret);
        return ret;
} /
        / 执行结果
        函数开始, n = 5
        函数开始, n = 4
        函数开始, n = 3
        函数开始, n = 2
        函数开始, n = 1
        函数结束, n = 1 ret = 1
        函数结束, n = 2 ret = 2
        函数结束, n = 3 ret = 6
        函数结束, n = 4 ret = 24
        函数结束, n = 5 ret = 120
        ret = 120


相信大家学过C语言的基本都做过这个。

其他递归的本质就是:追溯,利用后进后出,从追溯底部开始输出步骤。

递归调用的规则:


1. 执行一个方法时,就创建一个新的受保护的独立空间也就是:栈空间。


2. 方法的局部变量是独立的。


3. 如果方法中调用的是引用数据类型(比如数组,类),就需要共享该引用数据类型的数据(存放于堆区中)。


4. 递归必须无限逼近退出条件。


递归执行过程分析


递归的程序的执行过程不太容易理解, 要想理解清楚递归, 必须先理解清楚 "方法的执行过程", 尤其是 "方法执行结束之后, 回到调用位置继续往下执行".


就拿上面的代码画图:



36b6c0a3644e4a5abf222b3a0f010ec7.png


相关文章
|
14天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
28037 100
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
9天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
5358 15
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
8天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
3886 8
|
10天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
5084 17
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
3天前
|
应用服务中间件 API 网络安全
3分钟汉化OpenClaw,使用Docker快速部署启动OpenClaw(Clawdbot)教程
2026年全新推出的OpenClaw汉化版,是基于Claude API开发的智能对话系统本土化优化版本,解决了原版英文界面的使用壁垒,实现了界面、文档、指令的全中文适配。该版本采用Docker容器化部署方案,开箱即用,支持Linux、macOS、Windows全平台运行,适配个人、企业、生产等多种使用场景,同时具备灵活的配置选项和强大的扩展能力。本文将从项目简介、部署前准备、快速部署、详细配置、问题排查、监控维护等方面,提供完整的部署与使用指南,文中包含实操代码命令,确保不同技术水平的用户都能快速落地使用。
2493 0
|
10天前
|
存储 人工智能 机器人
OpenClaw是什么?阿里云OpenClaw(原Clawdbot/Moltbot)一键部署官方教程参考
OpenClaw是什么?OpenClaw(原Clawdbot/Moltbot)是一款实用的个人AI助理,能够24小时响应指令并执行任务,如处理文件、查询信息、自动化协同等。阿里云推出的OpenClaw一键部署方案,简化了复杂配置流程,用户无需专业技术储备,即可快速在轻量应用服务器上启用该服务,打造专属AI助理。本文将详细拆解部署全流程、进阶功能配置及常见问题解决方案,确保不改变原意且无营销表述。
5514 5
|
12天前
|
人工智能 JavaScript 应用服务中间件
零门槛部署本地AI助手:Windows系统Moltbot(Clawdbot)保姆级教程
Moltbot(原Clawdbot)是一款功能全面的智能体AI助手,不仅能通过聊天互动响应需求,还具备“动手”和“跑腿”能力——“手”可读写本地文件、执行代码、操控命令行,“脚”能联网搜索、访问网页并分析内容,“大脑”则可接入Qwen、OpenAI等云端API,或利用本地GPU运行模型。本教程专为Windows系统用户打造,从环境搭建到问题排查,详细拆解全流程,即使无技术基础也能顺利部署本地AI助理。
7431 16
|
12天前
|
人工智能 JavaScript API
零门槛部署本地 AI 助手:Clawdbot/Meltbot 部署深度保姆级教程
Clawdbot(Moltbot)是一款智能体AI助手,具备“手”(读写文件、执行代码)、“脚”(联网搜索、分析网页)和“脑”(接入Qwen/OpenAI等API或本地GPU模型)。本指南详解Windows下从Node.js环境搭建、一键安装到Token配置的全流程,助你快速部署本地AI助理。(239字)
5057 22