java的全局变量与局部变量

        java不仅仅将运行时内存分为了堆,方法区,虚拟机栈三部分还有程序计数器和本地方法栈两部分 尽管后两部分基本没有被提到过 但也是很重要的两部分 。堆中一半存储的是实例对象和数组 其实数组的本事也是封装好的实例对象罢了 所以一般来说 堆中存储的都是对象 无论这个对象是在作为类的属性时声明的还是在方法中声明的 实例对象都存储在堆中 方法区中一般存储什么 一般存储的是类的定义各个方法的定义 并不存储方法里各个变量 虚拟机栈中存储的才是方法中的各个变量 虚拟机栈简称栈 他是java中方法的本质 每当一个方法运行时 占中就会存入一个栈帧 这个栈帧中包含方法运行时所需的局部变量表等相关数据 一般情况下java中的方法都含有嵌套关系 即在一个方法中调用另一个方法 甚至简单的helloworld程序中的println方法也调用了由C编写的本地方法 有这种嵌套关系的方法才会被放入同一个栈中 当栈顶取出的方法执行完毕后才会取出下一个方法执行 直到一个栈为空时 最开始调用的那个方法才被执行完毕 这就是栈与方法的联系 类比可知一个无结束判定的递归方法所需的栈容量是无穷大的 这就是异常StackOverFlowException的由来 栈溢出异常。

        C语言的全局变量是有这一定义的 但由于java的入口函数是在类中所以java中的全局变量实际上是是成员变量 成员变量与局部变量的区别成员变量是有初值的存储在堆中 堆虽然是在JVM内存中但他是存储时单位 栈才是运行时内存 存储与运行是相对的 堆中的引用必须赋初值方法区中的变量是没有一定要求初值的 类信息是存储在方法区的所以被static修饰的成员变量存储在方法区中所以成员变量与局部变量的区别很大

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值