-
内存区域的划分
方法区:保存加载的类信息
•
类名、修饰符、父类信息
•
成员名、修饰符、类型
•
方法名、修饰符、类型、参数个数及类型
•
常量及类变量的值
记住:方法区存放的都是程序中永远唯一的元素
堆区:保存数组实体,对象实体
栈区:1.保存引用类型变量(保存了地址。比如对象的引用,数组名)
2.基本类型变量:直接保存值
2.Java类对象生命周期
(1)装载
读取class文件,在方法区保存该类的数据结构
(2)验证
检验代码是否规范,ex:是否有覆盖final修饰的方法
(3)准备
为类变量分配内存,设置默认值
(4)解析
对类的字段,方法等进行转换
(5)初始化
初始化类变量的值
(7)实例化(new了一个对象)
在堆中分配实体,保存对象实体
(8)垃圾收集
对象的实体没有被引用,不再使用时,回收
(9)卸载
整个类不再使用时,从方法区,堆中回收内存
3.为什么main方法必须修饰为static
•
要执行程序,系统
必须知道从哪里找到第一条指令
•
对于“单入口”的过程结构程序,程序第一行就是第一条指令;但是,
Java
程序是由多个类组成的,因此
必须确定从哪个类的那个方法开始执行
,
Java
中规定
main
方法
即为程序入口方法
•
如果
main
方法没有声明为
static
,那么只有创建拥有“
main”
方法的类的实例后才能载入
,而程序都不知道从哪里执行,又如何执行创建实例的代码呢?
•
将
main
方法声明为
static
后,
无需创建新对象即可确定
main
方法的首地址
,此时就能直接执行
main
方法了。