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

方法

一、方法的基本用法

1. 什么是方法

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

方法存在的意义:

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

2. 方法定义语法


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

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

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

4.形参和实参的关系

注意事项:

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

		可以用sout直接输出 函数的返回值(函数返回值支持链式调用)
			但是函数必须有返回值!

	在Java中没有所谓的函数的声明
	放在最上面和最下面 都可以(和C语言不同)

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

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

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

上面的代码是错误代码🚫

因为形参是实参的一份拷贝 对形参的改变不会影响实参
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);
}

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

2. 其他递归练习

1. 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
2. 递归求 1 + 2 + 3 + ... + 10
3. 写一个递归方法,输入一个非负整数,返回组成它的数字之和. 例如,输入 1729, 则应该返回1+7+2+9,
它的和是19
4. 求斐波那契数列的第 N 项
5. (思考)-> 非递归实现求斐波那契,递归斐波那契的缺陷
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021狮子歌歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值