当前位置: 首页 > news >正文

【详细解释第三部分:方法的使用【java版本详细】】

目录

  • 一、方法的定义以及使用
  • 二、方法概念及使用
    • 1.什么是方法
    • 2.方法定义
    • 3.方法调用的执行过程
    • 4.实参与形参的关系 ==【非常重要】==
    • 没有返回值的方法
  • 三、方法的重载(**重点**)
  • 四、方法签名(没有上一个重要)
  • 五、递归
    • 递归代码进行分析(图片的方式):

一、方法的定义以及使用

在编程当中,某段功能的代码可能频繁使用,如果在每一个位置都实现一遍,会使:
1.使程序变得繁琐
2.开发效率低下,做了大量的重复性的工作
3.不利于维护,需要改动时,所有用到该段代码的位置都需要进行修改
4.不利于复用
因此在编程过程当中将频繁使用到的代码进行封装,需要的时候只需要进行调用就可以

二、方法概念及使用

1.什么是方法

方法就是一个代码的片段,使用的时候会更加的方便,对于重复的工作只需要调用相关的代码即可已完成所有的工作

2.方法定义

修饰符返回值类型方法名称
public/private…八种基本类型+引用类型根据具体情况取名称

eg:实现一个函数,检测一个年份是否是闰年
已知:判断闰年有两种方式

整除4 && 不整除100 || 整除400

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

其中将0放在等号的左边,是为了防止比较的过程中少写一个等号而造成代码出错的问题
注意事项:
1.返回值类型:如果有返回值,必须与返回的实体类型一致,如果没有返回值,必须写成void的形式
2.方法名称:采用小驼峰命名
3.在java当中方法必须写在类当中
4.方法不支持嵌套定义
5.java当中没有方法的声明

3.方法调用的执行过程

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

注意事项:
1.只有在调用方法的时候,方法才会被执行
2.一个方法可以被多次调用

eg:计算1!+2!+3!+4!+5!;

public class TestMethod{
    public static void main(String[] args){
        int sum = 0;
        for(int i = 0; i <=5; i++){
            sum = fac(i);
        }
        System.out.println("sum = " + sum);
    }
    public static int fac(int n){
        int a = 1;
        for(int i = n; i>=1; i--){
            a = a*i;
        }
        return a;
    }
}

使用方法,避免使用二重循环,让代码更加简单清晰

4.实参与形参的关系 【非常重要】

形参:形参只是在方法当中需要借助的一个变量,用来保存方法在调用时传递过来的值

public static int getSum(int N){
    return (1+N)*N/2;
 }
getSum(10);
getSum(100);

其中的调用当中的10是实参
形参N用来保存10这个数据
注意:
在java当中,实参的值永远都是拷贝到形参当中,实参和形参本质上是两个个体

eg:代码演示问题说明:

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

原因解释
实参a和b是main方法中的两个变量,空间是在main栈当中的,而形参x和y是swap方法中的两个变量,空间是在swap运行的栈当中的
只是将实参当中a和b的值拷贝到了一份给了形参x和y
解决方案 传引用类型参数

public class TestMethod{
    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;
    }
}

此时的运行结果就会发生改变

没有返回值的方法

有的时候是可以没有返回值的,但是必须要将返回值写成void的形式

三、方法的重载(重点

1.原因:在使用代码期间可能会出现一堆代码的本质操作是一样的,但是需要取不同的名称
eg:在对一个整数进行相加操作时,可能还会出现对浮点数进行相加的操作,或者等等
此时就需要进行重载操作

public class Test{
    public static void main(String[] args[]){
        add(1,2);
        add(1.5,2.5);
        add(2.3,4.5,6);
    }
    public static int add(int a,int b){
        return a+b;
    }
    public static double add(double a,double b,double c){
        return a+b+c;
    }
    public static double add(double a,double b){
        return a+b;
    }
}

注意:

  1. 方法重载时:方法名必须相同
  2. 参数列表必须不同(参数的个数不同,参数的类型不同,类型的次序必须不同)
  3. 与方法的返回参数是没有关系的
    如果仅仅是返回类型不同,是不能够构成重载的

编译器在编译代码时,会对参数类型进行推演,根据推演出来的结果来确定调用哪一个参数

四、方法签名(没有上一个重要)

来由:在一个作用域当中不能够定义一个相同名称的标识符,但是为什么在一个类当中就可以定义方法名相同的方法呢?
根据编译器的变异修改的过程之后方法会有最终的名字:具体:方法全路径名+参数列表+返回值类型,从而构成方法完整的名称
方法签名当中的一些特殊字符

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

五、递归

通俗易懂的含义是:遇到问题:将原问题拆分为子问题,且子问题与原问题有相同的解法
用代码进行实例:
eg:求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);//进行对自身进行调用
}

递归代码进行分析(图片的方式):

其中的红色表示递,蓝色表示归
请添加图片描述

上述的图片是对递归的一个详细清晰的介绍

相关文章:

  • 从代码学习深度学习 - 稠密连接网络(DenseNet)PyTorch版
  • 装饰器模式与模板方法模式实现MyBatis-Plus QueryWrapper 扩展
  • Flink SQL Client bug ---datagen connector
  • 动态规划(11.按摩师)
  • Opencv计算机视觉编程攻略-第五节 用形态学运算变换图像
  • Git团队开发命令总结
  • 数字人训练数据修正解释
  • java 并发编程-ReentrantLock
  • python识别扫描版PDF文件,获取扫描版PDF文件的文本内容
  • 二叉树搜索树与双向链表
  • hackmyvm-flossy
  • AWS用Glue读取S3文件上传数据到Redshift,再导出到Quicksight完整版,含VPC配置
  • Android: Fragment 的使用指南
  • 004 健身房个性化训练计划——金丹期(体态改善)
  • 汇编学习之《数据传输指令》
  • 远程装个Jupyter-AI协作笔记本,Jupyter容器镜像版本怎么选?安装部署教程
  • Rust 语言语法糖深度解析:优雅背后的编译器魔法
  • VoIP技术及其与UDP的关系详解
  • 五类线和六类线
  • 洛谷: P1825 [USACO11OPEN] Corn Maze S
  • 做网站建设的平台/企业营销策划方案范文
  • 有梦商城公司网站/怎么做推广网站
  • 腾讯云怎么建设网站/廊坊关键词快速排名
  • 深圳市福田区香蜜湖街道/百度搜索引擎优化的推广计划
  • 易居做网站/今天上海最新新闻事件
  • 网站全屏大图代码/seo搜索优化 指数