Java-方法的使用

news2024/9/22 15:49:51

一、方法的概念和使用

      1.1方法的含义

           方法就是一个代码片段. 类似 C语言中的函数.

           方法的作用:

                    1.能够模块化的组织代码(当代码规模比较复杂时)。
                    2.代码被重复使用, 一份代码可以在多个位置使用。
                    3.让代码更好理解更简单。
                    4.直接调用现有方法, 不必重复敲相同代码

      1.2 方法的定义

            语法格式:

        修饰符 返回值类型 方法名称(参数列表){
            方法体
            (return 返回值);
         }

           示例

public static  boolean IsYear(int year){
    if((0 == year % 4 && 0 != year % 100) || 0 == year % 400){
        return true;
    }else{
        return false;
    }
}

        注意:修饰符:现阶段直接使用public static 固定搭配;返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void;方法名字:采用小驼峰命名;参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开;在java当中,方法必须写在类当中,方法不能嵌套定义,没有方法声明一说即不需要方法声明。

      1.3方法调用的执行过程

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

示例

public static int add1(int x, int y){
//x、y是形参,保存传递的数据,而main函数中的参并不改变
    return x + y;
}
public static void main(String[] args) {
    int a = 10;
    int b = 20;
    int ret = add1(a, b);
    System.out.println("ret = " + ret);
    ret = add1(30, 50);
    System.out.println("ret = " + ret);
}

         注意:定义方法的时, 不会执行方法的代码,只有调用的时候才会执行;一个方法可以被多次调用。

      1.4实参和形参的关系

        方法的形参相当于数学函数中的自变量,形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。在Java中,实参的值永远都是拷贝到形中,形参和实参本质是两个实体

示例

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和y的值发生了改变,但是main方法中a和b还是交换之前的值,即没有交换成功。

        原因分析:实参a和b是main方法中的两个变量,其空间在main方法的栈(一块特殊的内存空间)中,而形参x和y是swap方法中的两个变量,x和y的空间在swap方法运行时的栈中,故实参a和b 与 形参x和y是两个没有任何关联性的变量,在swap方法调用时,只是将实参a和b中的值拷贝了一份传递给了形参x和y,因此对形参x和y操作不会对实参a和b产生任何影响,对于基础类型来说, 形参相当于实参的拷贝. 即传值调用

        解决办法:传引用类型参数 (例如数组来解决这个问题)

        示例

public static void main(String[] args) {
    int[] arr = {10, 20};
    swap(arr);
    System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {
    int tmp = arr[0];
    arr[0] = arr[1];
    arr[1] = tmp;
}

 

      1.5没有返回值的方法

        方法的返回值是可有可无,没有时返回值类型必须写成void。

public static void main(String[] args) {
    int a = 10;
    int b = 20;
    print(a, b);
}
public static void print(int x, int y) {
    System.out.println("x = " + x + " y = " + y);
}

 

二、方法重载

        2.1方法重载的含义

        重载就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者重载方法。

        2.2方法重载的作用

        方法重载不用为了对不同的参数类型或参数个数,而写多个函数。多个函数用同一个名字,但参数表,即参数的个数或(和)数据类型可以不同,调用的时候,虽然方法名字相同,但根据参数表可以自动调用对应的函数。注意:重载函数,方法名必须相同;参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序不同),与返回值类型是否相同无关;编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法。

示例

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

 

        2.3 方法签名

        在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可以定义方法名相同的方法呢?方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字

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

特殊字符数据类型
Vvoid
Zboolean
Bbyte
Cchar
Sshort
Iint
Jlong
Ffloat
Ddouble
[数组(以[开头,配合其他的特殊字符,表述对应数据类型的数组,几个[表述几维数组)
L引用类型,以L开头,以;结尾,中间是引用类型的全类名

三、递归

3.1 递归的概念

        递归是一个方法在执行过程中调用自身。
        递归的必要条件:
                1.将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同
                2.递归出口

示例   求 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) {
        if (n == 1) {
        return 1;
        }

        return n * factor(n - 1)

}

 

3.2递归的执行过程

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/801931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux命令200例】indent对C语言代码进行缩进和格式化

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

力扣算法数学类—剑指 Offer 44. 数字序列中某一位的数字

目录 剑指 Offer 44. 数字序列中某一位的数字 题解: 代码: 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4&am…

24考研数据结构-栈和队列的应用

目录 3.3.1栈在括号匹配中的应用流程图算法代码 3.3.2栈在表达式求值中的应用1. 中缀表达式 (需要界限符)2. 后缀表达式 (逆波兰表达式)中缀表达式转后缀表达式-手算重点:中缀表达式转后缀表达式-机算重点:后缀表达式的计算—机算 3.前缀表达式 (波兰表达…

Linux中Anaconda安装失败(Failed to execute script entry_point)的解决方法

Linux中Anaconda安装失败(Failed to execute script entry_point)的解决方法 报错信息: Failed to execute script entry_point 解决办法: 清理硬盘空间,确定区间内空间足够 Linux文件按大小排序 du -hs * | sort …

已解决:多线程环境中,新线程在使用cout函数打印输出到显示器出现数据混乱的情况

错误展示错误原因解决办法1. 在本问题情况下:使用printf函数替代cout:2. 使用互斥锁使 cout函数线程保持原子状态 什么是原子操作? 错误展示 最近学习多线程的时候,创建了一堆线程,然后每个线程都运行这个方法&#x…

了解Unity编辑器之组件篇Miscellaneous(九)

一、Aim Constraint:是一种动画约束,用于使一个对象朝向另一个对象或一个指定的矢量方向 Activate按钮:用于激活或停用Aim Constraint。当Aim Constraint处于激活状态时,其约束效果将应用于目标对象。 Zero按钮:用于将…

一款8000MHz的国产DDR5电竞内存条,光威神策系列DDR5只需900即可入手,

光威近期发布了一款能到8000MHz的DDR5内存新品,相比市场上现有的DDR5内存条,光威神策系列DDR5在性能和产品设计方面都有了较大的突破,是国产内存的典范型产品。这款内存DDR5以唐代“神策军”命名,国风色彩很明显,也是光…

一套不错的基于uniapp实现的投票类小程序/H5

最近作者心血来潮,想做一个热点话题投票,话题相关的资讯跟踪类的小程序,方便自己发布一些大家比较关心的话题。 基于以上需求,说干就干,首先需要定义一个需求: 1、支持热门话题投票、排行榜(日…

注解和反射03--Class对象

注解和反射 Class类Class类的常用方法获取Class类的实例哪些类型可以有Class对象 Class类 在Object类重定义了以下的方法,此方法将被所有子类继承 public final Class getClass()以上的方法返回值的类型是一个Class类,此类是Java反射的源头&#xff0c…

【好文推荐】敏捷绩效考核如何做?

前言 一个Scrum团队有三个角色:产品负责人、开发团队和ScrumMaster。在Scrum里没有项目经理这个角色,传统项目经理的主要职责被分配到产品负责人和开发团队这两个角色中。产品负责人负责管理产品待办列表,开发团队自己组织和管理他们的工作。…

FreeRTOS(启动流程、编码风格、调试方法)

1、启动流程 1.1 方法一 在main函数中将硬件初始化、RTOS系统初始化,同时创建所有任务,再启动RTOS调度器。 1.2 方法二 在main函数中将硬件初始化、RTOS系统初始化,只创建一个启动任务,再启动RTOS调度器。 之后,在…

和我女神王冰冰一起学display: flex布局

前言 早期CSS布局依赖display属性position属性float属性。它对特殊的布局非常不方便,如,垂直居中。 于是,W3C在2009年提出了一种新的方案——Flex方案,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了…

Drupal YAML 反序列化代码执行漏洞(CVE-2017-6920)

事件背景 框架漏洞收集 老外的CMS框架,比较复杂,数据流向太长,调试需要消耗较多的时间。 漏洞说明 1. 漏洞原理:2017年6月21日,Drupal官方发布了一个编号为CVE-2017- 6920 的漏洞,影响为Critical。这是…

信驰达推出RTL8720DN系列2.4G和5G双频Wi-Fi+蓝牙二合一模块

近日,领先的无线物联网通信模块厂商深圳信驰达科技RF-star推出了基于RTL8720DN SoC的2.4 GHz和5 GHz双频Wi-Fi蓝牙二合一模块—RF-WM-20DNB1。 图 1信驰达RF-WM-20DNB1 Wi-Fi模块 RF-WM-20DNB1是一款低功耗单芯片无线蓝牙和Wi-Fi组合模块,支持双频(2.4 G…

关于骑行,这十个另类的励志文案,让人过目不忘。

在自行车骑行的世界里,有许多令人振奋和感动的励志句子。以下是一些令人过目不忘的另类励志文案,一定会给您的骑行生涯带来新的动力和激情: 1.骑行并非单纯的身体运动,而是需要灵魂的参与。2.自行车不会说话,但它会唱歌…

家庭用的无线洗地机到底好不好用?2023洗地机品牌排行榜前十名

无线洗地机在清洁使用的时候非常便捷,多功能于一体能够轻轻松松就拖扫完全家,不需要多余的先扫再拖,浪费时间还非常的劳累。那么有什么靠谱并且质量也有保障的无线洗地机推荐吗?为了给想要选购洗地机的小伙伴提供一些参考&#xf…

SpringMVC-mybatis中可以返回查询的个数,但是都为null。。。

通过postman测试请求时,显示查询成功,返回一个json数组,里面也有数据,但是数据都是null。 说明:确实是sql执行成功了,只不过是没有将sql中的字段的值给注入到对象的属性中去。。。 Select("SELECT * …

ArduPilot之433电传模块集成之H7Dual飞控Rx/Tx丝印问题

ArduPilot之433电传模块集成之H7Dual飞控Rx/Tx丝印问题 1. 源由2. 安装3. 排查3.1 电气连接3.2 软件配置3.3 模块测试3.4 通信测试3.5 定位问题 4. 总结5. 参考资料 1. 源由 鉴于最近iNav最新固件6.1.1出现远航炸机,还是回到相对可靠的Ardupilot,在Mavl…

Android 之 动画合集之属性动画 -- 又见

本节引言: 上节我们对Android的属性动画进行了初步的学习,相信大家对于属性动画已经不再是 一知半解的状态了,本节我们继续来探究Android属性动画的一些更高级的用法! 1.Evaluator自定义 1)Evaluator介绍 上一节中的…

黑马程序员-从0到1学习Linux-第三章-Linux用户和权限

目录 认知root用户 用户、用户组管理 查看权限控制 修改权限控制 - chmod 修改权限控制 - chown 认知root用户 1、root用户(超级管理员) 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中,拥有最大…