Java-方法
2021/5/16 20:25:41
本文主要是介绍Java-方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- Java-方法
- 1 概述和作用
- 2 方法目的
- 3 方法声明
- 3.1 语法
- 3.1.1 方法修饰符列表
- 3.1.2 返回值类型
- 3.1.3 方法名
- 3.1.4 参数列表
- 3.1.4.1 形参
- 3.1.4.2 实参
- 3.1.5 方法体
- 4 方法分类
- 4.1 静态方法
- 4.2 成员方法
- 4.3 构造方法
- 5 方法调用
- 5.1 静态方法调用
- 5.1.1 语法
- 5.2 成员方法调用
- 5.2.1 语法
- 5.3 构造方法调用
- 5.3.1 语法
- 6 返回值的使用
- 6.1 有返回值
- 6.2 没有返回值
- 7 方法重载(唯一性)
- 8 内存分析
- 8.1 Java中的内存划分
- 8.1.1 程序计数器
- 8.1.2 方法区/静态区
- 8.1.3 栈内存
- 8.1.4 堆内存
- 8.1.5本地栈
- 8.2 java执行流程
- 8.3 程序的加载
- 8.3 程序的加载
Java-方法
1 概述和作用
一堆代码的集合,可以重复使用
好处:
使程序变得更简洁更清晰
有利于程序维护
提高开发效率
提高代码重用性/复用性
重点: 方法目的,方法声明,方法执行,方法唯一性
2 方法目的
代码重复:相同的功能,相同的代码,不用写很多遍,只写一遍即可,然后重复使用这一段代码,方法就是很多条语句的集合,当我们使用这个方法,就等于运行这段代码
3 方法声明
3.1 语法
[修饰符列表] 返回值类型 方法名(西安舒列表){方法体}
[ ]:可有可无,也可以有多个
3.1.1 方法修饰符列表
权限控制(四选一):public,private,protect,默认(不写)
static(声明静态),abstract,synchronized,final
3.1.2 返回值类型
11种数据类型的任意一种,或者是void(没有返回值)
3.1.3 方法名
合适的标识符即可(符合命名标准)
3.1.4 参数列表
可有可无,可以有多个(使用逗号隔开)
3.1.4.1 形参
形容参数,在方法声明的时候,规定应该传入什么类型的数据
3.1.4.2 实参
实际参数,调用方法的时候,实际传入的数据
3.1.5 方法体
如果有返回值类型,那么方法体中最后一句必须要写return数据,另外return还有终止方法运行的作用
如果没有返回值类型,那么方法中可以没有return语句,如果要加return也可以,但return之后不能有数据,此时return只有终止方法运行的作用
4 方法分类
4.1 静态方法
类体中, 使用static修饰的方法,是静态方法,类相关
4.2 成员方法
类体中, 没有使用static修饰的方法,是成员方法,对象相关
4.3 构造方法
用于创建对象
5 方法调用
方法不调用不执行,调用才执行,并把结果返回到调用处
所以方法声明时,不需要考虑声明的先后顺序
因为执行顺序是看调用顺序,而不是声明顺序,因为声明的时候不执行
5.1 静态方法调用
5.1.1 语法
类名.静态方法(参数值),当前类中,类名可以省略
5.2 成员方法调用
5.2.1 语法
对象.成员方法(参数值)
5.3 构造方法调用
5.3.1 语法
new
6 返回值的使用
6.1 有返回值
如果方法有返回值的时候,必须有return(没有就会报错),而且return之后不能写代码(写了也会报错)
6.2 没有返回值
如果方法没有返回值,可以没有return
7 方法重载(唯一性)
方法唯一性:方法名和参数列表
方法重载:overload
方法名字相同,参数列表不同(个数不同或者类型不同)
在同一个类中,方法名是允许相同的,可以根据不同的参数列表找到某一个方法叫方法重载
优点: 相同功能,只需要记住一个名字,通过不同的参数区分不同的方法即可
8 内存分析
程序:一堆命令的集合,是可执行文件,并且是一个静态概念,一般保存在硬盘中
进程:就是正在执行的程序,是个动态概念,会按照程序设计,一步步在内存中执行
运行起来的程序就是指载入到内存中的可执行程序,这个时候,操作系统会开启一个进程来运行内存中的这个文件对象
如果要关闭某个程序,可以直接结束该进程
8.1 Java中的内存划分
Java Runtime Data Area : java运行时数据区,也可以叫JVM内存
内存被划分为5个区域 : 程序计数器,方法区/静态区,栈内存,堆内存,本地方法栈
8.1.1 程序计数器
是一块比较小的内存区域,可以看做是当前执行的字节码位置, 分支 , 循环 , 跳转,异常等都需要依赖于程序计数器
可以理解为保存执行的代码行号,每个方法都会有一个计数器,要么你怎么知道返回值要返回到哪里去
8.1.2 方法区/静态区
保存我们的程序文件(class) , 载入内存后的哪个文件,java中就是class文件
包括方法执行之前,还有代码段,内部的运行常量池
8.1.3 栈内存
别名: 虚拟机栈/VM栈/栈内存
方法是在栈内存中执行的,包括局部变量也是在栈内存
栈内存 : 就是一个以栈数据结构为模型的一段内存空间
栈 : 是一个数据结构,先进后出 , 比如 弹夹
栈的构成因素
栈空间 : 就是指以栈数据结构为模型的一段内存空间(弹夹)
栈帧 : 栈内存中的每一个栈元素,叫栈帧(子弹)
栈底元素 : 是指第一个放入栈空间的栈帧(第一个放入弹夹的子弹,在最下面)
栈顶元素 : 是指最后一个放入栈空间的栈帧(最后一个放入弹夹的子弹,在最上面)
栈操作 :
压栈 : 就是指把栈帧放入栈空间的过程(把子弹放到弹夹的过程)
弹栈 : 就是指把栈帧在栈空间内移出的过程(把子弹从弹夹中打出去的过程)
8.1.4 堆内存
用来存放 根据静态区中的class文件对象,创建的用来保存class定义的数据的对象的空间
用来保存对象(类创建的对象 new)
每个对象的空间 分为3块
1 数据部分 : 成员变量
2 头部 : hashCode值
3 类型 : 是哪个类实例化而来的,保存类文件在静态区的地址
8.1.5本地栈
比如hashCode()方法,前面有个 native(本地)声明, 当我们调用本地方法的时候,对于我们来说,和调用其他方法一样
但是对于JVM来说,还是有区别的,因为需要一个专门的区域来存放,native是C中的关键字
本地方法栈 和 VM栈 结构一样
VM栈用来执行我们的java方法服务的, 而本地方法栈是为了JVM使用native方法服务的
8.2 java执行流程
1 编码
文本编辑器,按照java规则,进行编码,创建.java文件
2 编译
通过javac命令,使用java编译器,对.java文件进行编译,生成.class文件
3 运行
通过java命令,运行.class程序
3.1 开启java虚拟机,把对应的.class文件载入内存中(静态区)
3.2 JVM自动调用该class中的main方法
3.3 main方法执行,JVM会在栈内存中开辟main方法栈帧(只要是方法调用,都会在栈内存开辟栈帧执行方法),然后把main方法中的代码复制进去,准备执行
3.4 如果main方法中 没有其他方法的调用,则安心执行main方法,执行完就终止,JVM就关闭
载入到静态区
3.6 如果main方法中,调用的当前类的方法,则不需要重载载入当前类
3.7 当main方法中调用其他方法的时候,会再去栈内存中开辟对应的方法栈帧,把对应方法的代码复制进去,准备执行
当该方法执行完成之后,方法弹栈,并返回到main方法中的调用处,继续向下执行
一直到main方法执行结束,弹栈,JVM关闭
8.3 程序的加载
1 静态加载 : 程序开始执行,一次性把所有相关的文件,全部载入内存
2 动态加载 : 程序开始执行,先载入当前文件,当用到其他文件的时候,再单独去加载
java 中采用的动态加载
方法调用 就是压栈操作 , 而 方法调用结束,则是弹栈操作
复制进去,准备执行
当该方法执行完成之后,方法弹栈,并返回到main方法中的调用处,继续向下执行
一直到main方法执行结束,弹栈,JVM关闭
8.3 程序的加载
1 静态加载 : 程序开始执行,一次性把所有相关的文件,全部载入内存
2 动态加载 : 程序开始执行,先载入当前文件,当用到其他文件的时候,再单独去加载
java 中采用的动态加载
方法调用 就是压栈操作 , 而 方法调用结束,则是弹栈操作
这篇关于Java-方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26JavaScript入门教程:从零开始学习JavaScript编程
- 2024-12-26JavaScript入门教程:从零开始学习JavaScript
- 2024-12-26JS编程入门指南:从零开始学习JavaScript
- 2024-12-25Java编程面试题详解与解答
- 2024-12-25TS基础知识详解:初学者必看教程
- 2024-12-252024面试题解析与攻略:从零开始的面试准备指南
- 2024-12-25数据结构与算法学习:新手入门教程
- 2024-12-25初学者必备:订单系统资料详解与实操教程
- 2024-12-24内网穿透资料入门教程
- 2024-12-24微服务资料入门指南