黑马程序员技术交流社区

标题: 局部字段和类字段 [打印本页]

作者: 黄威    时间: 2011-11-1 21:00
标题: 局部字段和类字段
局部变量每次运行完毕变量的值都会被销毁,下次再运行,会重新初始化,而类字段,只是一个对象,那么对象不会被销毁,就会一直保持对象的字段值。

   我想问:“局部变量为什么每次运行完毕变量的值都会被销毁,下次再运行,又会重新初始化?内部原理是什么呀?它的值是放在那里的呀?求解答?

该贴已经同步到 黄威的微博
作者: 黄威    时间: 2011-11-1 21:28
回答的不是很贴切呀,还是不很清楚
作者: 李荣壮    时间: 2011-11-1 21:48
本帖最后由 李荣壮 于 2011-11-1 22:04 编辑

你想想一个大型软件,比如Visual Studio,他运行的时候很多需要N多内存,N多的变量,如果你不把它销毁掉,那程序很快就把你的内存用光了。
既然已经销毁了,再用到的时候就必须初始化了,

再看看C#提供的4种变量:
名称类型的成员 存储位置自动初始化描述
局部变量 栈或者栈和堆 在方法的作用域内保存临时数据
字段 保存和类型相关的数据
参数 用于从一个方法到另一个方法传递数据的临时变量
数组元素用于保存临时的或类型相关的数据



作者: 章坚    时间: 2011-11-1 21:50
你想一个问题    .NET具有回收机制  你定义一个变量就需要在内存中开辟一个空间来存放值    如果像你所说的局部变量不进行回收  定义了就一直存在
那运行一个程序需要多大的内存来运行
作者: 章坚    时间: 2011-11-1 21:54
而且 局部变量只在一个局部进行调用 不是在全局进行调用   定义了就一直存在你难道不觉得多余吗??
就像你去北京参加黑马  你可以一次把一年四季的衣服都带齐去  但你不觉得麻烦吗    所以你会带合适的一部分衣服   不需要的就留下
作者: 李荣壮    时间: 2011-11-1 21:59
内存原理,我也不太清楚,我想应该是因为GC吧,系统在用完之后自动回收了。
作者: 黄威    时间: 2011-11-1 22:43
你们讲的例子很有道理,我明白。谢谢!
作者: 夏雪锐    时间: 2011-11-1 23:04
梁茗一 发表于 2011-11-1 21:18
字段分为三种实例字段、静态字段、常量
写在方法里为局部变量
在初始化上字段有默认初始化 值类型为0 引用 ...

局部变量不一定只在方法里比如{int a=0;}一个块中,还有比如for(int i=0;i<9;i++)里面的i等等
作者: 陈涛    时间: 2011-11-1 23:12
局部变量每次运行完毕变量的值都会被销毁,下次再运行,会重新初始化,而类字段,只是一个对象,那么对象不会被销毁,就会一直保持对象的字段值。  记住这一点不就可以了吗?
作者: 夏雪锐    时间: 2011-11-1 23:25
章坚 发表于 2011-11-1 21:50
你想一个问题    .NET具有回收机制  你定义一个变量就需要在内存中开辟一个空间来存放值    如果像你所说的 ...

这不是。NET所具有的垃圾回收机制,JAVA C照样有。这关系到栈或者栈和堆的原理,
作者: 郑文    时间: 2011-11-2 08:52
所谓的局部变量 是存储到栈区上的,栈区是数据结构中栈的应用,也就是后进先出,数据不断的压栈与出栈操作。如果你熟悉数据结构的话理解应该没问题。如果不理解首先你应该明白 数据有三个存储区:
1,栈区 是存储局部变量的。
2. 堆区:存储类 字符串的等引用型变量。
3.静态存储区 主要是存储static等静态字段的。
而这些内存分配等都有CLR完成了 。 如果你真想弄明白首先得学习数据结构和计算机组成原理这些基础的课程。
作者: 朱勋    时间: 2011-11-2 09:04
郑文 发表于 2011-11-2 08:52
所谓的局部变量 是存储到栈区上的,栈区是数据结构中栈的应用,也就是后进先出,数据不断的压栈与出栈操作 ...

恩,有道理




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2