ICode9

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

JavaSE学习笔记——day06

2021-05-16 18:02:46  阅读:183  来源: 互联网

标签:文件 执行 day06 笔记 调用 内存 JavaSE main 方法


day06

方法的重点:方法的目的,方法的声明,方法的执行,方法的唯一性

1、方法的目的

方法的目的是代码的重复使用

相同功能的代码不需要写很多遍,写一遍即可,以后直接调用

方法是一堆代码的集合,调用这个方法就等于使用这些代码

2、方法的声明

[修饰符列表] 返回值类型 方法名 (参数列表){方法体,即代码}

1、方法的修饰符列表是可选的:

权限控制(四选一):public privant proteced默认(不写)

static(声明静态),abstract,synchronized , fina

2、返回值类型:

十一种数据类型,或者没有(void)

3、方法名:合法的方法名即可(大小写字母,下划线,数字,美元符号,数字不能开头)

4、参数列表:可以有哦,可以没有,可以有多个。多个之间用逗号隔开

形参:形式参数,在方法声明的时候规定要传入的参数类型

实参:实际参数,在方法调用的时候,实际传入的参数

5、方法体:要做的事,代码的集合

5.1如果有返回值类型,那么在方法最后一行要写return数值,return还有终止方法运行的作用

5.2如果没有返回值类型,return可写可不写。在return之后不能再有数值,此时只有终止功能

6、方法的分类:

静态方法:类中使用static修饰的方法,是静态方法,类相关

成员方法:类中,没有使用static修饰的方法是成员方法,对象相关

注意:方法的声明,只管功能的实现,而谁调用,用来干什么则无关

3、方法的唯一性

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

方法重载:overload(方法名相同,参数列表不同)

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

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

4、程序的执行

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

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

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

  • 如果要关闭某个程序,可以直接关闭这个进程

  •  

  • Java中的内存划分:

  • Java Runtime Data Area :,Java循运行数据区,也叫JVM内存

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

  •  

  • 程序计数器:是一块比较小的内存区域,可以看成是当前执行的代码位置,分支,循环,跳转等都需要依赖程序计数器

  • 可以理解为保存执行代码的行号,每个方法都会有一个计数器,要么你怎么知道返回值要返回到哪里去

  •  

  • 方法区/静态区:保存我们的程序文件,载入内存后的哪个文件,Java中就是class文件

  • 包括方法执行之前,还有代码段,内部的运行常量池

  •  

  • 栈内存:虚拟机栈,vm栈,栈内存

  • 方法是在栈内存中执行的,局部变量也是在栈内存

  •  

  • 栈内存:就是一个以栈数据结构为模型的一段内存空间,是先进后出的(类似弹夹中填装子弹)

  •  

  • 栈的构成因素:

  • 栈空间:以栈数据类型为模型的一段内存空间(类似弹夹)

  • 栈帧:栈内存中的每一个栈元素(类似子弹)

  • 栈底元素:第一个填入的

  • 栈顶元素:第一个取出的

  • 栈操作:

  • 压栈:把栈帧放入到内存空间的过程

  • 弹栈:把栈帧取出的过程

  • 堆内存:

  • 用来存放根据静态区中的class文件创建的,用来保存class定义的数据的对象的空间

  • 用来保存创建的对象(类创建的对象new)

  • 每个对象的空间分为三块

  • 1、数据部分:成员变量

  • 2、头部:hashcode值

  • 3、类型:是哪个类实例化而来的,保存类文件在静态区的地址

  •  

  • 本地栈:

  • 比如hashCode()方法,前面有个 native(本地)声明, 当我们调用本地方法的时候,对于我们来说,和调用其他方法一样

  • 但是对于JVM来说,还是有区别的,因为需要一个专门的区域来存放,native是C中的关键字

  • 本地方法栈 和 VM栈 结构一样

  • VM栈用来执行我们的java方法服务的, 而本地方法栈是为了JVM使用native方法服务的

  •  

  • Java执行流程:

  • 1、编码

  • 文本编辑器,根据Java语法规则,编写出.java文件。

  • 2、编译

  • 通过javac命令,将.java文件编译成.class文件

  • 3、运行

  • 通过java命令,运行.class文件

  • 3.1 开启Java虚拟机,把.class文件载入进去

  • 3.2 jvm自动调用main方法

  • 3.3 main方法执行,JVM会在栈内存中开辟main方法栈帧(只要是方法调用,都会在栈内存开辟栈帧执行方法),然后把main方法中的代码复制进去,准备执行

  • 3.4 如果main方法中 没有其他方法的调用,则安心执行main方法,执行完就终止,JVM就关闭

  • 3.5 如果main方法中,有其他方法的调用,如果是其他类,则需要把对应的类的class文件,也载入到静态区

  • 3.6 如果main方法中,调用的当前类的方法,则不需要重载载入当前类

  • 3.7 当main方法中调用其他方法的时候,会再去栈内存中开辟对应的方法栈帧,把对应方法的代码复制进去,准备执行

  • 当该方法执行完成之后,方法弹栈,并返回到main方法中的调用处,继续向下执行

  • 一直到main方法执行结束,弹栈,JVM关闭

  •  

  • 程序的加载:1 静态加载 : 程序开始执行,一次性把所有相关的文件,全部载入内存

  • 2 动态加载 : 程序开始执行,先载入当前文件,当用到其他文件的时候,再单独去加载

  • java 中采用的动态加载

标签:文件,执行,day06,笔记,调用,内存,JavaSE,main,方法
来源: https://blog.csdn.net/weixin_46030783/article/details/116898582

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

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

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

ICode9版权所有