黑马程序员技术交流社区
标题:
变量在内存栈和堆中的位置
[打印本页]
作者:
ithmC4
时间:
2014-4-12 21:55
标题:
变量在内存栈和堆中的位置
本帖最后由 ithmC4 于 2014-4-13 08:27 编辑
看下面的代码:
package com.mypackage;
public class Person {
private int age; //成员变量age
private String name; //成员变量name
public void setAge(int age) { //形参age
this.age = age;
}
public int getAge() {
return age;
}
public void setName(String name) { //形参name
this.name = name;
}
public String getName() {
return name;
}
}
复制代码
这里类的成员变量age,name是在堆中
而两个成员函数的形参age,name是在栈中
为什么?形参不是属于成员函数的吗,难道是局部变量?
作者:
姜姗姗
时间:
2014-4-12 21:57
想表达什么?从问题上看不出你想问哪里?
作者:
caijunsong
时间:
2014-4-12 22:34
成员变量和局部变量的区别:
成员变量就是定义在类中一般是首行的数据,它的作用域是整个类
而局部变量一般是在三个地方
1、在方法中的参数列表中
2、在方法中的代码块中
3、在普通代码块中 就是简单的{}中定义的变量 他们的作用范围是从定义开始到代码块结束
引用和基本变量是在栈中分配内存,而对象是在堆中分配内存,
我们知道类中是有字段(成员变量)和方法(成员方法),那么用一个类创建n个对象,其实只是在内存之中创建了这个n个对象的字段,而方法是放在一个叫方法区的内存块值中,当我们的程序类引用调用了对应的方法时,是把方法区中的方法压入栈中,等方法使用完在出栈就行了,方法中的局部变量等就都是在栈中分配内存的
成员变量只要你的类中的age和name
作者:
xuehuayous
时间:
2014-4-12 22:36
成员变量和局部变量
作用范围:成员变量作用于整个类,局部变量作用与函数中。
在内存中的位置:成员变量在堆内存中,因为对象的存在,才在堆内存中存在;而局部变量在栈内存中
希望对你有帮助!
作者:
Royvan
时间:
2014-4-12 23:21
个人觉得是这样的:
类加载后,类成员和方法都存放在方法区。
类实例化后,便会在堆中开辟空间存放对象的信息,包括非静态变量和非静态方法的指向(不知道叫啥),方法跟静态变量存放在方法区中(堆和栈之外的另一个JVM控制的内存空间)。
形参不是类的成员,不在实例化后的对象中,也就不在堆中。它是局部变量(即便有时它是一个实体的引用)。
作者:
曹冬明
时间:
2014-4-14 10:49
我的理解是,对象在堆中生成,成员变量作为对象的特殊属性, 和对象一起生成在堆中,成员函数的中变量,是main中调用创建对象后调用成员方法时需要传入的,所以一个在堆中,一个在栈中。。个人见解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2