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 中采用的动态加载