ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java-方法

2021-05-16 19:02:22  阅读:133  来源: 互联网

标签:调用 Java 内存 3.1 返回值 执行 方法


文章目录

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之后不能写代码(写了也会报错)

image-20210516183651013

6.2 没有返回值

如果方法没有返回值,可以没有return

image-20210516183732811

7 方法重载(唯一性)

方法唯一性:方法名和参数列表

方法重载:overload

​ 方法名字相同,参数列表不同(个数不同或者类型不同)

在同一个类中,方法名是允许相同的,可以根据不同的参数列表找到某一个方法叫方法重载

优点: 相同功能,只需要记住一个名字,通过不同的参数区分不同的方法即可

image-20210516183918211

8 内存分析

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

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

​ 运行起来的程序就是指载入到内存中的可执行程序,这个时候,操作系统会开启一个进程来运行内存中的这个文件对象

​ 如果要关闭某个程序,可以直接结束该进程

8.1 Java中的内存划分

​ Java Runtime Data Area : java运行时数据区,也可以叫JVM内存

​ 内存被划分为5个区域 : 程序计数器,方法区/静态区,栈内存,堆内存,本地方法栈

image-20210516184043164

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,内存,3.1,返回值,执行,方法
来源: https://blog.csdn.net/simplelove0519/article/details/116900232

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有