黑马程序员技术交流社区
标题:
成员变量与局部变量?
[打印本页]
作者:
赵家阳
时间:
2012-9-3 20:45
标题:
成员变量与局部变量?
本帖最后由 victoryai 于 2012-9-3 22:35 编辑
视频中有讲过:成员变量存储在堆内存中(因为对象存在堆内存中),局部变量存储在栈中,弱弱的问一下,一个类中的局部变量存储在什么地方??请高手详细讲解一下!谢谢!
作者:
阳杰
时间:
2012-9-3 20:54
内存一共可以分为六个区:
栈:
作者:
黄基焜
时间:
2012-9-3 20:55
类中的局部变量还是局部变量,还是先搞清楚局部变量和成员变量的区分
作者:
朱烈葵
时间:
2012-9-3 21:00
如果你说类上面的局部变量存在于堆内存,局部括号里面的存在于栈内存
作者:
彭润生
时间:
2012-9-3 21:04
java变量存储
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
3. 堆:存放所有new出来的对象。
4. 静态域:存放静态成员(static定义的)
5. 常量池:存放字符串常量和基本类型常量(public static final)。
对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。
局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。成员变量存储在堆中的对象里面,由垃圾回收器负责回收。
作者:
阳杰
时间:
2012-9-3 21:10
本帖最后由 阳杰 于 2012-9-3 21:13 编辑
内存一共可以分为六个区:
1, 栈: 当前执行的代码,局部变量
2,堆:new 出来的对象
3 ,数据区: 静态变量,共享的东西
4,寄存器:由编译器分配,我们控制不了,是最快的存储区
5,代码区: 代码。然而 常量通常存在于代码中,
6,非ram: 存活在程序之外的数据
类中的局部变量是当类中的函数被该类对象调用时,函数进栈,在栈中创建,当函数执行完,被释放
作者:
zhaosenyang
时间:
2012-9-3 21:20
本帖最后由 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 21:21
成员变量和局部变量的区别:
1. 成员变量存在于类中的成员位置,而局部变量存在于方法中;
2. 成员变量可以不用初始化(被final修饰且没有static的必须显示赋值),
而局部变量必须进行初始化。
3. 成员变量可以被 public private protected static 等修饰符所修饰,
而局部变量不能被控制符及static修饰,但是两者都可以定义成final型 。
4. 成员变量存在于堆内存中,局部变量存在于栈中,
5. 两者存在的时间还稍有不同,一般情况下成员变量先于局部变量。
class DuiLie
{
private LinkedList link;
DuiLie()
{
link = new LinkedList();
}
}
------------------------------------
class DuiLie
{
DuiLie()
{
LinkedList link = new LinkedList();
}
}
复制代码
第一个link就是成员变量,后一个就是局部变量了。
作者:
舒远
时间:
2012-9-3 21:30
方法中的局部变量是存在于方法的栈区中的。
作者:
赵家阳
时间:
2012-9-3 22:37
讲的很详细,受教了~ {:soso_e130:}
作者:
彭润生
时间:
2012-9-4 07:28
彭润生 发表于 2012-9-3 21:04
java变量存储
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本 ...
:D,呵呵呵。加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2