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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李海 中级黑马   /  2012-5-21 19:50  /  2378 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

构造函数,成员函数,和一般函数的问题都是存在栈中?还是只用一般函数在栈中,其余两个都在堆中? 在说说它们的区别?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
构造函数主要用来创建对象时初始化对象,它没有返回值,也不能用void来修饰,与类名必须一致。一个类中,随着构造函数的不同可以创建出很多构造函数,构造函数不能被直接调用,只有通过创建对象后才自动调用。
一般函数不能与类名相同,在创建对象后多了一种调用方式:类名.一般函数。
而构造函数跟一般函数都是在对象创建的前提下存在于堆内存中。
成员函数应该是包括构造函数跟一般函数的吧。
回复 使用道具 举报
我的理解:栈内存中一般都是存储指向其他更复杂、更大的存储区域的地址。比如:在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。而堆内存中存放比较复杂的数据结构,比如由new创建的对象和数组。 由于构造函数和普通函数中都可以创建数组、变量,所以函数中定义的变量是存储在栈内存中,数组中具体的值存储在堆内存中。相比堆内存,栈存储速度更快些,存储的数据共享程度高,但是灵活性较弱。
构造函数和一般函数的区别在视频教程中有比较详细的介绍,这里再赘述下:
1.构造函数的命名必须和类名完全相同
2.构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰
3.构造函数只能在类初始化时被调用一次,此后不能被直接重复调用。
4.如果没有显式的声明构造函数,系统会提供默认的无参数的构造函数。
5.多个构造函数间是通过重载的方式实现的。欢迎补充。。。
回复 使用道具 举报
杨康 发表于 2012-5-21 20:30
构造函数主要用来创建对象时初始化对象,它没有返回值,也不能用void来修饰,与类名必须一致。一个类中,随 ...

错了   一般函数一定是存在于栈中的
回复 使用道具 举报
杨永峰 发表于 2012-5-21 20:31
我的理解:栈内存中一般都是存储指向其他更复杂、更大的存储区域的地址。比如:在函数中定义的一些基本类型 ...

  兄弟  你说的我都知道  我就想问  当你调用普通函数,  构造函数,成员函数的时候,  他是在栈内存中开辟空间  还是在堆内存中开辟空间?
回复 使用道具 举报
构造函数用来构造实例对象,需要用new来调用;一般函数就是java中一般的方法了,通过实例对象来调用;静态方法可以直接通过类名来调用。程序运行的时候对象都是放在堆空间,栈一般方一些基本数据类型的变量和对象句柄。
回复 使用道具 举报
你所说的普通函数,  构造函数,成员函数里面都可以定义基本变量,创建数组,创建新的对象。基本变量和引用地址一般存在栈内存,new 出来的数组对象实例、类对象实例,一般存在堆内存。 比如: int [] arr = new int[3];  arr 是指向new 出来的数组实例的变量,存在栈内存,数组实例中的具体值:arr[0]、arr[1]...存在堆内存中。其他的类似。
换个角度。栈代表了处理逻辑,堆代表了数据。一个函数中既有逻辑又有数据。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马