`
xiaomogui
  • 浏览: 238959 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java基础之变量

阅读更多

1. Class文件加载流程

      在java中,类装载器把一个类装载到java虚拟机中,经过装载,链接和初始化;链接又包括校验,准备和
解析。必须严格按照顺序执行的。
      装载:查找和导入类和接口的二进制数据(.class文件)
      链接:执行校验,准备和解析(可选)
           校验:检查导入类和接口数据的正确性
           准备:给类的静态变量分配内存并将其初始化默认值
           解析:将符号引用转换成直接引用
       初始化:调用java代码,初始化类的静态变量(把类变量初始化正确初始值)和静态java代码块

 

2. 变量初始化

       变量可以分为局部变量和全局变量,全局变量又分为实例变量和类变量(static静态变量);

       局部变量一般是在方法内部的变量,由于其作用域在方法的内部有效,所以线程是安全的; 不能由public,private ,protected,等修饰;也不能由static修饰。

       类变量如果用public修饰,则其作用域是全局的,如果用private修饰则其作用域只在类的内部。一般方法和静态方法跟局部变量和静态变量的关系一样。

       栈--长度固定,由编译器自动释放;

       堆--数据长度不固定,动态分配,垃圾回收器(gc)可以回收;

       全局区(也叫静态区)--存放静态变量和全局变量;

       类的静态变量在内存中只有一个,在java虚拟机叫做类的过程中位静态变量分配内存,静态变量位于方法去,被类的所有实例共享。器生命周期取决于类的生命周期。

       实例变量取决于类的实例,当创建一个实例时,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区,不一定连续的空间。

       局部变量在方法内部或者某些循环中,执行到她的时候直接在栈中开辟内存并使用。当局部变量脱离作用域,则释放内存,局部变量必须手工初始化。

       局部变量位于栈区,静态变量位于方法区,实例变量位于堆区,方法的字节码位于方法区,对象本身位于堆区,对象的引用位于栈区

 

       一个class文件是由类加载器加载进来的以后.class文件被加载进来以后放在方法区。

       方法本身作为指令的操作码部分,保存在stack中,方法内部变量作为指令的操作数部分,跟在指令的操作码后,保存在stack中。

       对象实例及其属性值保存在堆中。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics