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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ithmC4 中级黑马   /  2014-4-12 21:55  /  1209 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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是在栈中
为什么?形参不是属于成员函数的吗,难道是局部变量?


评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

5 个回复

正序浏览
我的理解是,对象在堆中生成,成员变量作为对象的特殊属性, 和对象一起生成在堆中,成员函数的中变量,是main中调用创建对象后调用成员方法时需要传入的,所以一个在堆中,一个在栈中。。个人见解
回复 使用道具 举报
个人觉得是这样的:
类加载后,类成员和方法都存放在方法区。
类实例化后,便会在堆中开辟空间存放对象的信息,包括非静态变量和非静态方法的指向(不知道叫啥),方法跟静态变量存放在方法区中(堆和栈之外的另一个JVM控制的内存空间)。
形参不是类的成员,不在实例化后的对象中,也就不在堆中。它是局部变量(即便有时它是一个实体的引用)。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
成员变量和局部变量
作用范围:成员变量作用于整个类,局部变量作用与函数中。
在内存中的位置:成员变量在堆内存中,因为对象的存在,才在堆内存中存在;而局部变量在栈内存中
希望对你有帮助!
回复 使用道具 举报
成员变量和局部变量的区别:
成员变量就是定义在类中一般是首行的数据,它的作用域是整个类
而局部变量一般是在三个地方
1、在方法中的参数列表中
2、在方法中的代码块中
3、在普通代码块中 就是简单的{}中定义的变量  他们的作用范围是从定义开始到代码块结束
引用和基本变量是在栈中分配内存,而对象是在堆中分配内存,
我们知道类中是有字段(成员变量)和方法(成员方法),那么用一个类创建n个对象,其实只是在内存之中创建了这个n个对象的字段,而方法是放在一个叫方法区的内存块值中,当我们的程序类引用调用了对应的方法时,是把方法区中的方法压入栈中,等方法使用完在出栈就行了,方法中的局部变量等就都是在栈中分配内存的
  成员变量只要你的类中的age和name  

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报 1 0
想表达什么?从问题上看不出你想问哪里?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马