-
008-Java中方法的使用(进阶篇)
一、方法的重载(overload)
一、什么是方法的重载
- 在同一个类中
- 方法名相同
-
参数列表不同
- 参数个数不同算不同
- 参数类型不同算不同
- 参数顺序不同算不同
只要同时满足上面三个条件,那么我们就可以认定方法之间发生了重载机制,注:
方法重载和方法的返回值类型无关
方法重载和方法的修饰符列表无关
二、方法执行时的内存变化
一、JVM主要三块内存空间
- 方法区:最先有数据,存放代码片段,存放class字节码文件;
- 堆内存:这里先卖个关子,后面博客会补上的;
- 栈内存:方法调用的时候,该方法需要的内存空间在栈中分配,方法不调用时是不会在栈中分配空间的;
注:这只是主要三块内存空间,除了这三块还有其他的。
二、关于栈的数据结构(如图)
由于方法调用时所需要的内存空间在栈中分配,因此这里需要简单的了解一下栈的数据结构;
数据结构是存储数据的容器,而该容器在存储数据时存在着不同的结构,栈就是其中一种结构:
- 栈存储数据的特点:先进后出,后进先出;
- 栈存储的是方法运行过程中需要的内存,以及栈中会存储方法的局部变量;
- 方法只有在调用的时候才会在栈中分配内存,此时成为:压栈;
- 方法在执行结束之后,该方法所需要的空间就会释放,此时称为:弹栈;
三、方法执行过程内存变化(用以下代码演示)
- 代码图
2. 运行结果
3. 内存变化图
三、方法的递归
一、递归的使用及其内存图
- 代码图
2. 内存变化图(这里只画出栈内存)
二、递归的注意事项
- 当递归时候程序没有结束条件,一定会发生:栈内存溢出错误:Stack OverflowError,因此,递归必须要有结束条件;
- 递归假设是有结束条件时,假设这个结束条件是对的,是合法的,递归有的时候也会出现栈内存溢出错误,因为有可能递归的太深,栈内存不够了。因为一直在压栈;
- 在实际中,不建议轻易的选择递归,能用for循环while循环代替的,尽量使用循环来做。因为循环的效率高,耗费的内存少。递归耗费的内存比较大,另外递归的使用不当,会导致JVM死掉;
原文:https://www.cnblogs.com/yunlixzm/p/jichu08.html
最新更新
带有参数的装饰器
类装饰器
django中的auth模块与admin后台管理
python的日期处理
字符串常用方法
基本数据类型概述
python-map()函数基本用法
python带你实现任意下载AcFun视频数据~
bbs项目之注册功能
变量的定义和使用
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
VB.NET中如何快速访问注册表
ASP.NET中图象处理过程详解
Vue(1)Vue安装与使用
JavaScript 语言入门
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型
TypeScript(2)WebStorm自动编译TypeScript配置