黑马程序员技术交流社区

标题: 类中的成员变量与成员函数在内存中怎样存在? [打印本页]

作者: 陈立凯    时间: 2014-5-16 00:42
标题: 类中的成员变量与成员函数在内存中怎样存在?
看着看着遇到不懂得地方。有什么描述不好的地方请见谅。对象存在于栈内存,其值是堆中其成员所在的地址值。那么类存在于堆还是栈当中?是否一直存在其中还是有生存周期?对象在内存中是如何对类的属性和方法进行继承?
作者: 张斌    时间: 2014-5-16 08:56
可以这么说,当以一个对象在内存在建立时,如 A c=new A();  实体部分new A()是存放在堆类存中,此时会产生一个堆内存地址值 如 0x0001, 会指向栈内存中的 A c引用。一个对象可有多引用,就如对象是气球,但是下面可以接很多很绳子,并不是一条,当堆中的对象地址不被任何引用指向,系统在一定的时间类就会当做垃圾回收。
作者: 陈立凯    时间: 2014-5-16 12:27
张斌 发表于 2014-5-16 08:56
可以这么说,当以一个对象在内存在建立时,如 A c=new A();  实体部分new A()是存放在堆类存中,此时会产生 ...

谢谢您的解答,我有了更加深刻的认识。视频的知识点在您的解说下更加明了了。而这些是针对于对象而言,那么类呢?在内存中对象时如何继承类的属性和方法?是不是在创建一个类的对象时,就将类的地址值赋值给对象?
作者: 张斌    时间: 2014-5-17 11:38

类和对象的区别
  


1
,类是一个抽象的概念,它不存在于现实中的时间
/
空间里,类只是为所有的对象定义
了抽象的属性与行为。就好像
“Person
(人)

这个类,它虽然可以包含很多个体,但它本身
不存在于现实世界上。
  


2
,对象是类的一个具体。它是一个实实在在存在的东西。
  


3
,类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本
身不存在于内存空间中。
  


4
,对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的
属性和行为。对象的属性可以随着它自己的行为而发生改变。

类是在内存是不存在的,存在的是对象实体,只要要类没有把方法和属性私有,那么对象建立就可以拥有类中的方法和属性,就像人一样一出生就应该具备,哭,笑等属性,吃东西方法。当建立一个类的对象时系统会自己产生一个对象地址赋值给所指的引用,(A c) 就不存在类这个地址这句话不通 ,希望能对你有帮组




作者: 天外的星    时间: 2014-5-17 13:18
懂了不少。
作者: 假Rǔ有⒈兲    时间: 2014-5-17 20:09
我是来看回答的
作者: wy_heima    时间: 2014-5-17 20:39
看看更细的解释吧。。对于语句 Person p = new Person();它在内存中做了哪些事情?
A、将Person.class文件加载到内存中。
B、在栈内存中声明Person类型的变量p
C、在堆内存中创建一个对象Person。分配内存地址值。
D、把Person中的属性进行默认初始化
E、把Person中的属性进行显示初始化
F、调用构造代码块(如果没有就不执行)
G、调用构造函数进行初始化
H、把堆内存中地址值 赋给栈中p

觉得可以就给个赞吧
作者: 右手的依恋    时间: 2014-5-17 21:27
类是一个事物的抽象模型,本质上就是表达事物的性质和行为,类来建立抽象模型,是通过在类中定义变量和方法来实现的,对象是类的实例,类的成员变量都在堆上,没用的对象会被垃圾回收器回收
作者: 陈立凯    时间: 2014-5-21 22:28
张斌 发表于 2014-5-17 11:38
类和对象的区别
  

很有帮助,谢谢你。
作者: 陈立凯    时间: 2014-5-21 22:29
wy_heima 发表于 2014-5-17 20:39
看看更细的解释吧。。对于语句 Person p = new Person();它在内存中做了哪些事情?
A、将Person.class文件 ...

简洁明了,我会继续努力学习,帮助其他人。
作者: 陈立凯    时间: 2014-5-21 22:31
右手的依恋 发表于 2014-5-17 21:27
类是一个事物的抽象模型,本质上就是表达事物的性质和行为,类来建立抽象模型,是通过在类中定义变量和方法 ...

你们三个的回答都给了我指导。谢谢了1




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2