黑马程序员技术交流社区

标题: 变量在内存栈和堆中的位置 [打印本页]

作者: ithmC4    时间: 2014-4-12 21:55
标题: 变量在内存栈和堆中的位置
本帖最后由 ithmC4 于 2014-4-13 08:27 编辑

看下面的代码:
  1. package com.mypackage;

  2. public class Person {
  3.         private int age;                //成员变量age
  4.         private String name;        //成员变量name
  5.         public void setAge(int age) {                //形参age
  6.                 this.age = age;
  7.         }
  8.         public int getAge() {
  9.                 return age;
  10.         }
  11.         
  12.         public void setName(String name) {        //形参name
  13.                 this.name = name;
  14.         }
  15.         public String getName() {
  16.                 return name;
  17.         }

  18. }
复制代码

这里类的成员变量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