java基础之变量

1. Class文件加载流程

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

 

2. 变量初始化

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

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

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

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

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

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

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

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

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

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

 

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值