1.类的初始化过程:
类的静态成员在类被加载的时候进行初始化!!
数据成员初始化过程:
1)在堆中分配空间
2)给对性的属性赋默认值
boolean=false
基本类型=0
引用类型=null
3)调用构造器
4)进一步赋值
2.main方法的执行过程
main中代码:
Student stu=new Student();
stu.study();
1).先到方法区搜索Student。class对象(此对象它描述了Student类的方法特
征及静态成员等),如果搜索不到则去加载Student的字节码文件;
2).通过classpath查找对应的Student字节码文件,找不到就返回错误:
类找不到;
3).将字节码文件的二进制数据转换为class对象放置于方法区,加载完成;
4).验证字节码文件;
5).在堆区划分空间,放置Student对象;
6).在栈(stack)区放置引用类型变量stu,stu指向的Student对象的地址;
7).Student对象存放class对象的地址;
8).通过stu引用类型变量的值找到Student对象,通过Student对象存放
class对象的地址找到对应的study方法,然后执行;
9).释放资源,JVM运行结束。
3.变量的作用域:
定义:变量生存的时间。
(1)变量的分类:
类的成员变量
①类的静态成员变量
Example:Student类的带static修饰的属性
类的静态成员变量的生命周期:
从类加载开始,到类被卸载结束。静态成员初始化以后放在方法区。
②类的实例成员变量
Student类的不带static修饰的属性。
变量初始化以后放在堆区。
实例变量的生命周期:
A.从对象生成开始,到对象被回收时结束。
B.类的实例成员变量在对象初始化的时候,会赋默认值。
基本类型number type:0,Boolean:false,character type :'/u0000'
引用类型:null,如String
C.先按照B的规则赋给一个初始值,然后构造器的赋值过程会覆盖掉初始值。
( 2 )局部变量
Definition:局部变量是方法或代码块中定义的变量。
JVM中的某个线程调用方法的时候,将局部变量压入栈区开始,方法调用结束,(
局部变量从栈区(stack)弹出结束。
局部变量在使用前必须要赋值。
(3)方法的参数
例如:for(int i=0;i<10;i++),add(int i1,int i2)
(4)异常的参数
例如:try...catch(Exception e)