Java 方法的重载、内存划分、递归

本文详细介绍了Java中的方法重载,通过实例展示了如何根据参数列表的不同实现相同功能的方法。同时,深入探讨了内存划分,包括静态区、VM栈、堆内存等,并解释了程序的执行流程。此外,还阐述了递归的概念,包括应用场景、常见异常,并提供了斐波那契数列的递归案例。
摘要由CSDN通过智能技术生成

目录

1. 方法

1.1方法重载

1.2内存划分

2.递归

2.1概述

2.2 应用场景

2.3常见异常

2.4  案例 


 

1. 方法

 

1.1方法重载

方法重载: 方法名相同,参数列表不同.

参数列表不同分为两种:  1 类型不同  2  个数不同

相同功能,相同名字,通过不同的参数区分,比较美观,容易记忆,相同的功能只需要记住一个方法即可


public class Chongzai {

	public static void main(String[] args) {
		isEquals((byte)1,(byte)2);//定义初始值类型大小;并且调用方法
		isEquals((short) 1,(short) 2);
		isEquals(1,2);
		isEquals(1,2L);
		boolean n=		isEquals((byte)1,(byte)2);//定义返回值
		boolean n1=		isEquals((short) 1,(short) 2);

				boolean n2=		isEquals((short) 1,(short) 2);

						boolean n3=		isEquals((short) 1,(short) 2);


		System.out.println(n);//输出
		System.out.println(n1);//输出
		System.out.println(n2);//输出
		System.out.println(n3);//输出


		
	}
	public static boolean isEquals(byte a, byte b){
		return a==b;
	}
	public static boolean isEquals( short a, short b){
		return a==b;
	}
	public static boolean isEquals(int  a, int b){
		return a==b;
	}
	public static boolean isEquals( long a,long  b){
		return a==b;
	}

}

1.2内存划分

程序: 可执行的文件,是一堆命令的集合,是个静态概念,保存在硬盘中

进程: 就是正在执行的程序,是个动态概念,保存在运行内存中,会按照该程序的设计在内存中进一步把执行

运行中的程序 也就是指载入到内存中的可执行文件,操作系统会开启一个进程,用来保存运行的这个文件

如果想要关闭某个程序只需要在内存中把该进程杀死即可

  java的内存划分和管理

             Java Runtime Data Area : java运行时数据区域,一般叫JVM内存

            分为五大块 :

1 静态区/方法区  2 VM栈 3 堆内存 4 程序计数器 5 本地方法栈

 程序计数器 : 是一块比较小的内存,字节码位置的指示器,比如当前执行到第几行了之类,分支,循环,跳转等           

 静态区 : 用来保存我们的程序文件(class),载入到内存之后的class文件保存在静态区中,还有一些静态资源 另外 方法被调用之前 也保存在静态区  , 还有常量池

 VM栈 : 又叫栈内存 , 用来执行方法

            是以栈数据结构为模型创建的一段空间 : 先进后出,类似于弹夹

 栈空间 : 就是栈内存,就是以栈数据结构为模型创建的内存空间,叫栈空间 栈帧 : 栈空间中的元素,就是栈帧,比如 弹夹是栈空间的话,子弹就是栈帧

栈底元素 : 第一个放进去的栈帧

栈顶元素  : 最后一个放进去的栈帧

栈操作 :

 压栈 : 就是指向栈空间中添加栈帧的过程,就是把子弹放到弹夹中,叫压栈

 弹栈 : 就是指把栈帧在栈空间中弹出的过程   

本地方法栈 : 用来执行本地方法,和栈内存一样, 使用 native 修饰的方法, 和我们没关系

堆内存 : 用来保存对象

   执行流程 :

1 javac编译 生成class文件

2 java命令 运行

 2.1 开启java虚拟机,然后把对应的文件 Method_02.class 载入内存中的静态区

 2.2 载入之后,JVM自动调用该程序中main方法 ,然后再栈内存开辟main方法栈帧,开始执行

2.3 如果main方法中没有其他方法调用,则执行完结束,销毁即可

 2.4 如果main方法中有其他方法调用, 如果是其他类中的方法,则把对应类也会加载到静态区,然后调用该方法

2.5 如果是当前类的 方法,直接在栈内存继续压栈即可

 2.6 如果被调用方法中还有其他方法调用的话,则步骤同上

2.7 一直到最后一个压栈的方法执行完,弹栈,然后再依次返回调用处继续执行

 2.8 一直到main方法执行完,弹栈,程序销毁

方法的调用,就等于是压栈操作

而方法调用结束,就等于弹栈操作

静态加载:程序开始执行的,首先把所有和程序相关的类全部一次性载入

动态加载:开始执行的时候,只加载必须的类,在执行的过程中,需要用到其他的类,再去加载

Java中采用的是动态加载

2.递归

2.1概述

递归 :在方法体中,调用当前方法(自己调用自己)

递归的基本思想: 递归和迭代是等价的(迭代就是循环)以此类推 是基本思想

三要素: 初始值, 终止条件, 步长

2.2 应用场景

应用场景

一般树状结构的都可以使用递归操作(比如查询地区,文件目录等等)

递归算法比普通算法更消耗内存,谨慎使用,能完成循环的就不要用递归完成,除了某些特定情况只能用递归完成

递归场景面试题

1.文件夹复制

2.斐波那契数列

2.3常见异常

栈内存溢出,就是装满了

1. 程序有问题,导致死循环

2. 程序没有问题,就是装不下了


2.4  案例 

/**
 * 需求: 计算1~N的累加加和,并把结果返回
 * @author 人间失格
 *
 */
public class DiGui_01 {

	public static void main(String[] args) {
		int result=sum(5);//调用sum方法,并且给予参数
		System.out.println(result);//打印输出加和结果
	}
	public static int sum(int n){//定义sum方法,公共的 静态 int型
		int sum=0;//初始值为0 
		for(int i=1;i<=n;i++){//for循环
			sum+=i;//加和
		}
		return sum;//结束返回sum,
		
	}

}
/**
 * 需求: 计算1~N的偶数和并返回
 * @author 人间失格
 *
 */
public class DiGui {

	public static void main(String[] args) {
		int n1=sum(4);//调用sum方法,并命名为n1,定义参数列表
		System.out.println(n1);//打印返回值
	}
	public static int sum(int n ){//定义sum方法
		if(n%2==1){//判断是否为偶数
			n--;//如果是偶数n-1
		}
		
		if(n==2){//如果结果是2
		return 2;//输出2
		}
		return n+sum(n-2);
	}

}

斐波那契数列

/**
 * 斐波那契数列
 * 除了前两位是1,后面每一位都等于前两位的和
 * 输入位数,得到相对于的位数的值
 * @author 人间失格
 *
 */
public class Fbnqsl {

	public static void main(String[] args) {
		int n1=fbnqs(20);
		System.out.println(n1);

	}
	public static int fbnqs(int n){
		if(n==1|n==2){
			return 1;
		}else {
			return fbnqs(n-1)+(n-2);
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Iiversse

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

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

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

打赏作者

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

抵扣说明:

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

余额充值