• Java基础——初识Java(3) 简单认识方法


    方法

    一、方法的基本用法

    1. 什么是方法

    方法就是一个代码片段. 类似于 C 语言中的 “函数”. 其实就是一个功能,可以重复使用

    方法存在的意义:

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

    2. 方法定义语法

    
    // 方法定义
    public static 方法返回值 方法名称([参数类型 形参 ...]){
    方法体代码;
    [return 返回值];//可以有可以没有 (看返回值类型是不是void )
    }
    // 方法调用
    返回值变量 = 方法名称(实参...);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意:方法一般用小驼峰命名

    3.方法的调用

    例子:写一个方法实现两个数相加

    class Test {
    	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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    4.形参和实参的关系

    注意事项:

    在Java中是拿不到变量的地址的,
    所以在Java中只有按值传递
    传参的时候注意匹配问题
    整个函数在使用过程当中都要注意匹配问题
    1. 形参和实参数据类型匹配
    2. 形参和实参的个数匹配
    3. 返回值和方法的返回类型匹配
    4. 接收方法返回值的变量也需要和其返回值类型匹配

    		可以用sout直接输出 函数的返回值(函数返回值支持链式调用)
    			但是函数必须有返回值!
    
    	在Java中没有所谓的函数的声明
    	放在最上面和最下面 都可以(和C语言不同)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果想要拿到地址,只能把变量放到堆上,这样就可以拿到地址
    (但放到堆上的都是对象)

    例子:交换两个整型变量的值

    class Test {
    	public static void main(String[] args) {
    	int a = 10;
    	int b = 20;
    	swap(a, b);
    	System.out.println("a = " + a + " b = " + b);
    	}
    	public static void swap(int x, int y) {
    	int tmp = x;
    	x = y;
    	y = tmp;
    	}
    }
    // 运行结果
    a = 10 b = 20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    上面的代码是错误代码🚫

    因为形参是实参的一份拷贝 对形参的改变不会影响实参
    x 和 y是处在swap()方法里的局部变量 代码的作用是交换了x和y的值
    而main方法中的a和b并没有发生改变
    并且调用完swap()函数之后 里面的变量就销毁了

    Java中无法直接通过栈地址拿到变量,但是Java中存在引用变量,形参传递引用变量就可以解决这个问题
    变量的引用就相当变量的地址,只不过该变量的类型应为对象(放在堆上)

    如何交换?

    –可以利用数组 !

    二、方法的重载

    到这里和C就开始不一样了

    1. 什么是重载

    首先理解什么是重载
    可能会有这样的场景:
    我们想实现一个加法函数,会实现多个函数
    addInt(int x,int y)--两个整型相加
    addFloat(float x,float y)--两个浮点型相加
    addDouble(double x,double y)--两个双精度浮点型相加
    addInt3(int x,int y,int z)---三个整型相加
    可以看到 需要定义多个函数,并且名字不一样
    那么我们在使用的时候就需要考虑 实现的是什么加法
    从而调用相应的函数名字

    但是我们平时使用的计算器,不管你输入的是什么类型,还是输入几个数
    只需要按 +就可以,即,只需要一个add函数名就可以

    使用同一个方法名字,提供不同版本的实现,就称为方法重载

    2. 方法重载的三个条件

    1. 方法名相同
    2. 方法的参数列表不同(个数,类型)
    3. 方法的返回值不做要求.

    也就是说:靠第二个条件,即参数列表来识别不同的重载!
    如果定义重载的时候第二个条件相同就会报错!因为会认为是同一个重载

    3. 重载的使用:

    在这里插入图片描述

    方法的名字都叫 add. 但是有的 add 是计算 int 相加, 有的是 double 相加; 有的计算两个数字相加, 有的是计算三个数
    字相加.
    同一个方法名字, 提供不同版本的实现, 称为 方法重载

    三、方法递归

    方法的递归和C中函数的递归基本一样

    一个方法在执行过程中调用自身, 就称为 “递归”

    比较简单 就以例子来说
    简单举个例子

    1. 例子:求5的阶乘

    
    public static int factor(int n) {
     	 if (n == 1) {
    	 	return 1;
    	 }
      	int ret = n * factor(n - 1);
     	return ret;
    }
    public static void main(String[] args) {
      	int n = 5;
      	int ret = factor(n);
      	System.out.println("ret = " + ret);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    递归展开图
    在这里插入图片描述

    2. 其他递归练习

    1. 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
    2. 递归求 1 + 2 + 3 + ... + 10
    3. 写一个递归方法,输入一个非负整数,返回组成它的数字之和. 例如,输入 1729, 则应该返回1+7+2+9,
    它的和是19
    4. 求斐波那契数列的第 N 项
    5. (思考)-> 非递归实现求斐波那契,递归斐波那契的缺陷
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    【2023秋招面经】360集团 前端 一面(25min)
    HCIP第十二天笔记
    2小时开发《点球射门游戏》,动画演示思路(上),代码已开源
    如何在 windows 中安装 VMware Workstation Pro 16.2.4
    JavaS
    小程序的破局之道,数字化营销已然成为趋势
    MySQL数据库管理基本操作(二)
    WorkTool企微机器人APP分享自定义链接
    ios 让tableview 的section cell整体圆角
    面试官:Zookeeper集群怎么搭建?
  • 原文地址:https://blog.csdn.net/K_04_10/article/details/125406928