当前位置:

首页 > 编程开发 > Java方法使用实例分析

Java方法使用实例分析

一、方法的概念及其使用1.1、什么是方法方法就是一个代码片段.类似于C语言中的“函数”。作用如下:1.是能够模块化的组织代码(当代码规模比较复杂的时候).2.做到代码被重复使用,一份代码可以在多个位置使用.3.让代码更好理解更简单.4.直接调用现有方法开发,不必重复造轮子.1.2、方法的定义定义格式:示例:写函数实现求多少项的阶乘的和publicclassTeseDemo220424{//计算某一个数的阶乘publicstaticintfunc(intn){intret=1;for(inti=1;i找到方

本文目录

    一、方法的概念及其使用

    1.1、什么是方法

    方法就是一个代码片段. 类似于 C 语言中的 “函数”。作用如下:

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

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

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

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

    1.2、方法的定义

    定义格式:

    Java方法使用实例分析

    示例:写函数实现求多少项的阶乘的和

    public class TeseDemo220424 {
    //    计算某一个数的阶乘
        public static int func(int n){
            int ret = 1;
            for(int i = 1;i <= n;i++){
                ret *= i;
            }
            return ret;
        }
    //    计算前多少项阶乘之和
        public static int func1(int k){
            int sum = 0;
            for(int i = 1;i <= k;i++){
                sum += func(i);
            }
            return sum;
        }
        public static void main(String[] args) {
    //        写函数来求阶乘之和
            Scanner myscanner = new Scanner(System.in);
            System.out.println("请输入你想要求取前多少项的阶乘的和:");
            int num = myscanner.nextInt();
            int sum = func1(num);
            System.out.println("前 " + num + "项的阶乘和为" + sum);
        }
    }

    注意:

    1. 修饰符:现阶段直接使用public static 固定搭配(因为main方法是public static ,所以在里面调用的也只能是静态的方法)。

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

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

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

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

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

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

    8. 在java当中,没有方法声明一说。(声明与定义不区分)

    1.3、方法调用的执行过程

    调用过程:

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

    形象图示:

    Java方法使用实例分析

    注意:

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

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

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

    对于形参与实参的关系,大家肯定不陌生,那就是形参是实参的一份临时拷贝,也就是说形参的改变不会影响到实参。

    具体原因图示:(因为具体涉及到函数栈帧的问题比较复杂,这里就给大家简略的解释下)

    Java方法使用实例分析

    所以,由图可以知道,传值调用的话,形参与实参的值根本就不是存储在同一个空间,所以而这不会相互干扰,在C语言中,如果你希望形参的改变能够影响到实参,那就必须是传址调用,但是在Java里面没有传址这种说法,解决方法只能是利用引用(具体后面会详细介绍)。

    二、方法的重载

    2.1、为什么需要方法重载

    public class TestDemo220426 {
        public static int addInt(int x,int y){
            return x + y;
        }
        public static double addDouble(double x,double y){
            return x + y;
        }
        public static void main(String[] args) {
            int a = 10;
            int b = 10;
            int ret = addInt(a,b);
    
            double c = 11.1;
            double d = 12.1;
            double ret1 = addDouble(c,d);
        }
    }

    看这段代码,addint,adddouble这两个方法,目的都是为了求两个数的和,但是你得定义两个不同的函数,函数名不同,但往往有时候取名字又是一件头疼的事,所以既然方法的本质功能都是一样的,只是可能参数不同,那我们能不能都用同一个函数名呢?

    答案是肯定的,而这种就叫做方法的重载。

    2.2、方法重载的定义

    在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。也就是一个名字但却有不同的涵义。

    public class TestDemo220426 {
        public static int add(int x,int y){
            return x + y;
        }
        public static double add(double x,double y){
            return x + y;
        }
        public static void main(String[] args) {
            int a = 10;
            int b = 10;
            int ret = add(a,b);
            System.out.println(ret);
            double c = 11.1;
            double d = 12.1;
            double ret1 = add(c,d);
            System.out.println(ret1);
        }
    }

    程序运行截图:

    Java方法使用实例分析

    由上面的程序可以看出,都是实现相加的功能,但是定义的是两个不同的函数实现,只是函数名一样,这就是函数重载。编译器会根据你传入的参数的不同去调用相应的函数。

    注意:

    1. 方法名必须相同。

    2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)(需要以参数来区分)

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

    4. 不能定义仅仅以返回值区分的两个函数,这样不能构成重载

    5. 编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法

    2.3、方法签名

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

    如何可以查看到我们的方法签名:

    1. 先对工程进行编译生成.class字节码文件

    2. 在控制台中进入到要查看的.class所在的目录

    3. 输入:javap -v 字节码文件名字即可

    三、递归

    3.1、递归的概念

    定义:一个方法在执行过程中调用自身, 就称为 "递归。

    递归的必要条件:

    1. 递归的公式。

    2. 递归的终止条件。

    3.2、递归过程分析

        public static  int func(int num){
            if(num == 1){
                return 1;
            }
            return num*func(num - 1);
        }
        public static void main(String[] args) {
    //        递归求阶乘
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入一个数:");
            int num = scan.nextInt();
            int ret = func(num);
            System.out.println("阶乘为:" + ret);
        }
    }

    在这里我们以求一个数的阶乘的代码为例来分析一个递归的过程:

    Java方法使用实例分析

    递归的过程其实不复杂,看成两个部分,一个是递出去,而是归回来,上面的蓝色箭头是递的过程,红色箭头是归的过程。

    3.3、递归小练习

    • 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)

    public class TestDemo220427 {
        public static void myprint(int num){
            if(num < 10){
                System.out.println(num%10);
                return;
            }
            myprint(num/10);
            System.out.println(num%10);
            return;
        }
        public static void main(String[] args) {
    //        递归实现按顺序打印数字的每一位
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入一个数:");
            int num = scan.nextInt();
            myprint(num);
        }
    }
    • 求斐波那契数列的第 N 项

    public class TestDemo220428 {
        public static int fib1(int n){
            int f1 = 1;
            int f2 = 1;
            int f3 = 1;
            for(int i = 3;i <= n;i++){
                f3 = f1 + f2;
                f1 = f2;
                f2 = f3;
            }
            return f3;
        }
        public static int fib(int n){
            if(n == 1 || n == 2){
                return 1;
            }
            return fib(n-1) + fib(n-2);
        }
        public static void main(String[] args) {
    //        递归求斐波那契数列的第n项
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入您想要求取的项数:");
            int n = scan.nextInt();
            int ret = fib1(n);
            System.out.println("第" + n + "项为:" + ret);
        }
    }

    利用递归求斐波那契数列的第n项的话,其实是一个双路递归,不推荐这种求解的方法,因为会算很多重复的项,效率很低,一般都是选择循环迭代的方式来生成斐波那契数即可。

    Java方法使用实例分析

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。