方法、内存划分、递归

1.方法

1.1概述和优点

一堆命令的集合(有名字的代码段)、可重复使用
优点:使程序更加简短清晰、利于维护、提高开发效率、提高代码复用

1.2方法声明

【修饰符列表】 返回值类型 方法名(参数列表){方法体}
修饰符可有可无,可多个

1.修饰符列表
权限控制:public protected private 三选一
静态:static
abstract final 二选一
synchronize

2.返回值类型:11种中任意一种,或者是void。如果不需要返回,写void。有返回值时,需要什么类型写什么类型。

3.方法名:符合命名规则即可

4.参数列表:多个用逗号隔开,入参:做一件事,需要传入的必备条件
实参:使用方法时,真正传入的具体的值
形参:声明方法时,说明应该传入的参数类型和个数

5.方法体:要完成功能的代码
如果方法有返回值类型,方法体中必须有return语句
如果方法没有返回值类型,方法体中可以没有return,可以有,但是return后面不能写数据
return 还有终止方法运行的作用。

1.3方法的分类

方法分类:
1.静态方法:有static修饰的 不操作成员变量,可以直接调用。是用来直接对传入的数据进行操作
2.成员方法 :没有static修饰的 需要操作对象的成员变量
3.构造方法:…
静态方法和成员方法区别:
静态方法,不能操作成员变量,只是一个操作
成员方法,可以操作成员变量,不仅仅是操作,还与调用它的对象数据有关

方法调用:
1.静态方法:类名.静态方法名(参数)同类中,类名可省略 2.成员方法:对象.成员方法名(参数)
3.构造方法:…

方法声明的时候不执行,调用的时候才执行,并把结果返回
方法声明只管某个功能的实现,只保证功能可以使用
特殊方法main:所有方法调用的起点和终点都在main中,main方法是程序的入口,由JVM自动调用执行

1.4方法的重载 Overload

区分方法的唯一性:
1.方法名 2.参数列表
方法名相同,参数列表不同(个数不同或类型不同)
方法重载:解决命名过多,不好记忆的问题

1.5内存划分-初级认知

在这里插入图片描述

1.程序:一堆代码的集合,可执行的文件,是一个静态概念,一般保存在硬盘中
2.进程:正在执行的可执行文件,是一个动态的概念,按程序的设计,在内存中一步步执行
运行起来的程序,指的是载入到内存中的可执行文件,操作系统就会开启一个进程来运行这个内存中的文件对象。
关闭某个软件,可以直接结束这个进程。

Java的内存划分和管理
Java Runtime Data Area:java运行时数据区域,一般称为JVM内存
分为:静态区/方法区,VM栈,堆内存,本地栈,程序计数器

程序计数器:
是一块比较小的内存,可以看做字节码文件的指示器,分支、循环、跳转等。都程序计数器来完成。

静态区/方法区:
是存放我们的程序文件的,载入内存后的class文件,在静态区存储
包括方法,静态属性都是在静态区的
还有运行时的常量池

VM栈:
虚拟机栈,一般都叫栈内存
栈内存,是以栈的数据结构为模型,开辟的一块内存空间
栈是一种数据结构,先进后出,比如 弹夹
栈的构成因素:
栈空间:以栈的数据结构为模型开辟的空间
栈帧:栈空间中的每一个元素,就是一个栈帧。
比如 弹夹 就是栈空间,弹夹中的子弹就是栈帧
栈顶元素:最后一个放进去的栈帧,在最上面
栈底元素:指第一个放进去的栈帧,在最下面
方法都是在栈内存中执行的
栈的操作:
压栈:就是把栈帧放到栈空间的过程
弹栈:就是把栈帧从栈空间中弹出的过程

本地栈:
前面有个 native声明,本地
当我们执行这些方法的时候,会在本地栈执行
对于我们来说就是简单的调用方法,但对于JVM来说,需要单独的空间来储存c的服务
本地栈结构和VM栈 一模一样

堆内存:
用来保存对象的,…
每个对象空间,分为3大类
数据部分:成员变量 头部:hashCode值 类型:指向静态区中,创建该对象的这个class文件对象

java程序执行流程:
1.编码
开发软件,编码器进行编码,生成xx.java文件
2.编译
通过javac命令,把xx.java文件 编译成xx.class文件
3.运行
通过java命令,运行xx.class文件
3.1开启java虚拟机,然后xx.class文件被载入到内存中的静态区
3.2 jvm自动调用该程序的main方法
3.3 main方法被调用,会在栈内存中开辟main方法的栈帧,然后把main方法代码复制进去执行
如果main中,没有其他方法调用,则顺序执行完后,弹栈退出,jvm关机
如果main方法,有其他方法调用,就在栈内存中再开辟一个栈帧,把该方法的代码复制进去执行
如果被调用方法中,还有其他方法的调用,以此类推,执行完返回调用处,继续执行
一直到main方法都执行结束,弹栈,则JVM关机

程序的加载 :
静态加载 : 运行程序的时候,会一次性把所有相关的程序都载入
动态加载 : 运行过程中,用到谁 就去加载谁
java中采用 动态加载

方法的执行 :
方法在调用的时候,才会在栈内存找那个开辟栈帧
如果方法不调用,则不会再内存空间中划分空间,只保留在静态区
方法调用 : 就等于压栈操作
方法执行完成 : 就等于弹栈操作

1.6递归

在方法中调用当前方法
递归类似于循环,起始值、终止条件、步长,所有递归也需要,缺少就会造成死循环,导致栈内存溢出

应用场景:
一般树状结构都可以使用递归
比如查询地区,树状的菜单系统
递归比普通的算法更消耗内存,运行效率低,谨慎使用。循环搞不定的,再使用递归

常见问题:
需要获取文件下所有的目录
斐波那契数列这种规律的可以
累加加和
汉诺塔等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值