小白学Java之方法、栈内存、递归

一、方法

1.1 概述和作用

方法:一堆代码的集合,使用这个方法,就等于使用这些命令

优点:

  1. 使程序变的更加简洁,可读性较强
  2. 有利于维护和扩展
  3. 提高代码复用,提高开发效率
  4. 提高程序灵活度

方法,不调用不执行,调用才执行,并把结果返回给调用处

1.2 方法声明

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

解释:

修饰符列表:

可以有,可以没有,可以有多个
权限控制 : public private protected 不写 四选一
其他: static 静态 ,final 最终,abstract 抽象,…

返回值:

11种数据类型中的任意一种,如果没有返回值,则写void

方法名:

符合命名规则即可

参数列表:

没有参数又称为无参,多个参数 用逗号隔开
要做一件事,需要用到的必要的未知数
参数列表中的变量为局部变量

方法体:

{},功能代码

return:

  1. 终止方法执行
  2. 返回数据
  • 如果方法有返回值,那么方法体中必须有return语句 返回数据并终止执行;
  • 如果没有返回值,那么return可以加可以不加,就算加,也只能终止执行

1.3 方法分类

  • 静态方法:使用static修饰
  • 成员方法:没有使用static修饰
  • 构造方法:用于创建对象使用

1.4 方法调用

  • 静态方法调用: 类名.静态方法名(参数)调用,如果是调用当前类中的静态方法,类名可以省略
  • 成员方法调用:对象.成员方法名(参数)调用
  • 方法不调用不执行,调用才执行,并把结果返回给调用处

1.5 入参出参

  • 入参:参数列表(做完一件事后,需要返回的数据,是入参,一般是你的打印语句)
  • 出参:就是返回值(做完这件事后用到的未知数,就是入参)
	public static void main(String[] args) {
		// m1();
		// m2(4);
		m3(1, 100);
		// 接收返回值
		int reult = m4(1, 100);
		System.out.println(reult);
	}

	// 需求 : 打印1~10
	public static void m1() {
		for (int i = 1; i <= 10; i++) {
			System.out.println(i);
		}
	}

	// 需求 : 打印1~N
	public static void m2(int n) {
		for (int i = 1; i <= n; i++) {
			System.out.println(i);
		}
	}

	// 需求 : 计算 n~m的值,并打印 , 假设 n小于等于m
	public static void m3(int n, int m) {
		int sum = 0;
		for (int i = n; i <= m; i++) {
			sum += i;
		}
		System.out.println(sum);
	}

	// 需求 : 计算n~m的值并返回 , 假设 n小于等于m
	public static int m4(int n, int m) {
		int sum = 0;
		for (int i = n; i <= m; i++) {
			sum += i;
		}
		// System.out.println(sum);
		return sum;
	}

1.6 方法重载

重载目的:相同功能,相同名字,方便记忆,书写方便

方法重载:方法名相同,参数列表不同(1. 个数不同, 2. 类型不同)

二、栈内存

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=%E6%96%B9%E6%B3%95.assets%5Cimage-20240723182821079.png&pos_id=img-VU0gSuuk-1721739187756

 * java 中的内存划分和管理
 * 
 * java Runtime Data Area : java 运行时区域,一般叫JVM内存
 * 
 * 被分为五大块区域 : 程序计数器 , 方法区/静态区 , VM栈内存 , 本地方法栈 , 堆内存 
 * 
 * 程序计数器 : 是一块较小的空间,主要保存该线程执行的行号
 * 
 * 方法区 : 保存静态资源文件,包括运行的class文件
 * 
 * VM栈 : 以栈数据结构为模型开辟的一块空间,用于执行方法调用
 * 		栈数据结构 : 先进后出
 * 
 * 		栈帧 : 栈空间中的元素数据,称为栈帧
 * 		栈顶元素 : 最后一个添加的栈,在最上面
 * 		栈底元素 : 第一个添加的栈,在最下面
 * 
 * 		压栈 : 把栈帧放到栈空间的过程
 * 		弹栈 : 把栈帧在栈空间弹出的过程
 * 
 * 本地方法栈 :  用于执行本地方法,不用管
 * 
 * 堆内存 : 保存对象及数组
 * 
 * 
 * 过程 : 
 * 
 * 编码,得到.java文件 , 然后进行javac编译,生成class文件 , 通过java命令执行class文件
 * 
 * 1 开启jvm虚拟机,然后把相关class文件载入到JVM内存中的方法区
 * 
 * 2 调用class中的main方法,在栈内存开辟栈帧
 * 
 * 3 执行main方法,如果main方法中没有其他引用,执行完后,JVM关闭
 * 
 * 4 如果main方法中有其他方法引用,则再次创建新的栈帧来执行新方法(如果该方法是其他类中的,则需要先把相关类加载方法区)
 * 
 * 5 如果被调用方法中,还有其他方法调用,则继续创建新栈帧
 * 
 * 6 直到所有栈帧执行完毕,最后执行完毕main方法,则运行结果,JVM关闭

三、递归

3.1 使用

直接递归: 自己调用自己,在当前方法中,对自身方法进行调用
间接递归: 我调用你,你调用我
递归思想: 以此类推,和循环是一样的,都是以此类推的意思
递归和迭代是等价,都需要 起始值,终止条件,步长,否则就会出现死循环

循环能实现的递归一定能实现,递归能实现的循环不一定能实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.2常见异常

栈内存溢出

[外链图片转存中...(img-chEbl3N7-1721739187757)]

3.3 斐波那契数列

递归实现:

[外链图片转存中...(img-MkpeBnsZ-1721739187758)]

循环实现:

[外链图片转存中...(img-Ftw9swKN-1721739187758)]

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值