JavaSE学习笔记——day06

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


下一篇:day06