A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵家阳 中级黑马   /  2012-9-3 20:45  /  2500 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 victoryai 于 2012-9-3 22:35 编辑

视频中有讲过:成员变量存储在堆内存中(因为对象存在堆内存中),局部变量存储在栈中,弱弱的问一下,一个类中的局部变量存储在什么地方??请高手详细讲解一下!谢谢!

点评

请改为实名!  发表于 2012-9-3 21:16

10 个回复

倒序浏览
内存一共可以分为六个区:
      栈:
回复 使用道具 举报
类中的局部变量还是局部变量,还是先搞清楚局部变量和成员变量的区分
回复 使用道具 举报
如果你说类上面的局部变量存在于堆内存,局部括号里面的存在于栈内存
回复 使用道具 举报
java变量存储
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
3. 堆:存放所有new出来的对象。
4. 静态域:存放静态成员(static定义的)
5. 常量池:存放字符串常量和基本类型常量(public static final)。
对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。
局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。成员变量存储在堆中的对象里面,由垃圾回收器负责回收。






点评

很好!很详细!  发表于 2012-9-3 22:39
回复 使用道具 举报
本帖最后由 阳杰 于 2012-9-3 21:13 编辑

内存一共可以分为六个区:
1, 栈:  当前执行的代码,局部变量
2,堆:new 出来的对象
3 ,数据区: 静态变量,共享的东西
4,寄存器:由编译器分配,我们控制不了,是最快的存储区
5,代码区: 代码。然而 常量通常存在于代码中,
6,非ram: 存活在程序之外的数据

类中的局部变量是当类中的函数被该类对象调用时,函数进栈,在栈中创建,当函数执行完,被释放

点评

不错!  发表于 2012-9-3 22:39
不错  发表于 2012-9-3 22:09
回复 使用道具 举报
本帖最后由 zhaosenyang 于 2022-9-16 14:21 编辑

类的变量分为成员变量,局部变量。成员变量还分为静态成员变量和非静态成员变量。
局部变量:
是在方法里或者或者语句中,比如for语句。创建局部变量,存储在栈内存中。局部变量生命周期短,在栈内存中可以进行快速运算,效率高,作用域是在一对{}中,出了{},就会在栈内存中释放。
成员变量:
是在类的成员位置,即只在整个类的{}中,不在其他的{}内定义的变量。作用域为整个类。
其中,被静态static修饰的即为静态成员变量,也称作类变量,随着类的加载而加载,随着类的结束而结束。生命周期长。存储在内存中方法区的静态区中。
没有被static修饰的成员变量,是随着对象的建立而建立,存储于堆内存中,随着对象消失而消失,
举例:
class Person
{
    static String name;//静态成员变量(类变量)
     int age;//成员变量。在类的{}中创建,作用于整个类
     public void show()
     {
          int num=0;//局部变量,只作用于这个方法中
          System.out.println(num);
    }
      System.out.println(num);//编译失败,出了num的作用域,已经不能再访问
      System.out.println(name); //通过
     System.out.println(age);//通过

}

点评

够详细!谢谢!  发表于 2012-9-3 22:38
回复 使用道具 举报
成员变量和局部变量的区别:
1.  成员变量存在于类中的成员位置,而局部变量存在于方法中;

2.  成员变量可以不用初始化(被final修饰且没有static的必须显示赋值),
   而局部变量必须进行初始化。

3. 成员变量可以被 public private protected static 等修饰符所修饰,
   而局部变量不能被控制符及static修饰,但是两者都可以定义成final型 。

4.  成员变量存在于堆内存中,局部变量存在于栈中,

5.  两者存在的时间还稍有不同,一般情况下成员变量先于局部变量。

  1. class DuiLie
  2. {
  3.         private LinkedList link;
  4.         DuiLie()
  5.         {
  6.                 link = new LinkedList();
  7.         }
  8. }
  9. ------------------------------------
  10. class DuiLie
  11. {
  12.         DuiLie()
  13.         {
  14.                 LinkedList link = new LinkedList();
  15.         }
  16. }
复制代码
第一个link就是成员变量,后一个就是局部变量了。
回复 使用道具 举报
舒远 黑马帝 2012-9-3 21:30:52
9#
方法中的局部变量是存在于方法的栈区中的。
回复 使用道具 举报
讲的很详细,受教了~ {:soso_e130:}
回复 使用道具 举报
彭润生 发表于 2012-9-3 21:04
java变量存储
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本 ...

:D,呵呵呵。加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马