黑马程序员技术交流社区

标题: 一道面试题——求解。 [打印本页]

作者: 丘凤光    时间: 2013-4-23 09:10
标题: 一道面试题——求解。
本帖最后由 丘凤光 于 2013-4-23 12:59 编辑

在论坛上下了一本电子书,上面有一道面试例题1:对象与实例有什么区别?

书中的解析是:
解析:在Java 的内存分配中,对象和实例是不同的,前者分配在内存堆里,后者分配在堆栈里,至于为什么要这样分,参考一下其他的资料。对象是不变的东西,它是对客观事物的抽象,实例是对操作对象的引用,你不能直接操作对象。
答案:对象和实例从宏观的角度看,区别是:对象是同类事物的一种抽象表现形式,而实例是对象的具体化,一个对象可以实例化很多实例,对象就是一个模型,实例是照着这个模型生产的最终产品。实际上就是这样,一个对象可以实例化N 个实例。就像根据一个模型可以制造多个实际的产品一样。
从内存分配的角度来看,对象是保存在堆中的,而实例是存储在栈中的,实例其实只是
对象的一个引用,也就是指向对象的指针。


我的问题是,对象和实例真的有区别吗?我一直以为他们就是一个东西两种叫法而已呢。
老师的视频和教程不也经常是实例对象实例对象的连起来说吗?

对事物的抽象不是类么?解析类和对象的时候不经常举例:人是类,小明这个人是实实在在的对象。
书中的解析真心不理解。求论坛高手用大白话给菜鸟我解析解析{:soso_e100:}

作者: 杨晓燕    时间: 2013-4-23 09:31
我是菜鸟我也不懂,不过看答案也解释的很清楚,应该是有区别的,对象是模型,实例是照着这个模型生产的最终产品。
比如:对象=QQ车的模型;实例=QQ车,可以拿去开了。
作者: 极限冰风    时间: 2013-4-23 09:40
比如说电脑,在你没见过电脑的时候,有人给你描述了电脑是什么样子,又什么用,怎么用,于是在你心目中就又了电脑这个对象,你知道电脑是什么样子,又什么用途,并且只限于知道,又这个概念而已
当你第一次真正看到电脑并操作了电脑,你才真正知道电脑原来是这个样子的,是这样操作的,现在你的头脑中就有了电脑这个东西真实的样子了
前面你听说电脑后想象的样子就是对象,他是模糊的,不可操作的,这就是对象的一个特征
当你见到了真正的电脑,其实就是在你心目中实例了一个电脑对象。你见到的那台电脑就是你想象中的电脑对象的一个实例
作者: 极限冰风    时间: 2013-4-23 09:40
对象,是同种事物的一种抽象,实例是对象的具体话,对象 new 出来以后放在堆区,实例放在栈区,一个对象可以又多个实例

作者: 丘凤光    时间: 2013-4-23 10:00
极限冰风 发表于 2013-4-23 09:40
对象,是同种事物的一种抽象,实例是对象的具体话,对象 new 出来以后放在堆区,实例放在栈区,一个对象可 ...

对象,是同种事物的一种抽象
这句我就不太懂,对事物的抽象不是类吗?
作者: 肖川    时间: 2013-4-23 10:03
对象是具有相同属性的一类事物,而实例是一个具体的东西,比如说:
人----------------------类
男人------------------对象
迈克。乔丹---------实例

String----------------------,类
String arr-----------------,arr就是对象
String arr="mkie"--------,"mike"就是实例
作者: 丘凤光    时间: 2013-4-23 10:11
肖川 发表于 2013-4-23 10:03
对象是具有相同属性的一类事物,而实例是一个具体的东西,比如说:
人----------------------类
男人------ ...

按你的意思是 String str=new String("mkie");变量str是对象,newString("mkie")是实例是么?
那我们为什么都说new一个对象呢?
作者: infinitezheng    时间: 2013-4-23 10:19
本帖最后由 infinitezheng 于 2013-4-23 10:25 编辑

我觉得应该是类定义一个对象,通过new 创建一个对象的实例,即对象的实例化。好比人是类,小明是对象,他的实例可以有高兴时的小明,少年小明,老年小明
作者: 王亚东    时间: 2013-4-23 11:32
在设计时,对象就是我们程序中的类,在程序中,对象是类的一个实例,所以我们经常说的实例对象都是指在程序中。
所谓设计,就是在编程之前我们脑海的分析,常说:万物皆对象。抽象到程序中就是类。
作者: 肖川    时间: 2013-4-23 12:40
丘凤光 发表于 2013-4-23 10:11
按你的意思是 String str=new String("mkie");变量str是对象,newString("mkie")是实例是么?
那我们为什 ...

自动装箱拆箱!。。
String str = "mike"
String str = new String("mike")是一样的
具体的内容就是实例!
作者: 黄玉昆    时间: 2013-4-23 12:52
1、其实对于你这个问题和方法、函数、功能的问题是差不多的。
2、毕竟是翻译过来的书,所以可能每个人翻译出来的词语是不同的,但是本质是一样的。
3、按这个解释来说,你这里说的实例对象,其实是实例化对象的简称,而对象也是类的另一种说法。
4、平时我们说创建了一个对象,其实是说我们创建了一个对象的引用,这个引用指向了堆内存中new出来的一个实例,new一个对象,是new这个类的一个具体化的东西出来。
5、就像说“事物”一样,事物可以表示一类事物,就是这个事物的总称,如汽车的图纸,模具等抽象出来的概念
事物还可以表示单个东西,就是这个抽象概念的具体化。
建议:
其实你不必要纠结于这些名词是怎么解释的,你只要明白有这么个概念,知道如何使用就行了。
作者: 丘凤光    时间: 2013-4-23 12:58
黄玉昆 发表于 2013-4-23 12:52
1、其实对于你这个问题和方法、函数、功能的问题是差不多的。
2、毕竟是翻译过来的书,所以可能每个人翻译 ...

版主,入学考试会考这些不?

越学越觉得这样的模棱两可的问题很多,要是不考以后也很少用,那我就省事了
作者: 曹睿翔    时间: 2013-4-23 13:02
要是有自己的理解就整理一下,下次云丝的疑问集合就会收集到面相对象部分
作者: 黄玉昆    时间: 2013-4-23 13:02
丘凤光 发表于 2013-4-23 12:58
版主,入学考试会考这些不?

越学越觉得这样的模棱两可的问题很多,要是不考以后也很少用,那我就省事了 ...

这个我也不知道考不考呢,因为我也没面试呢。
其实你只要能讲清楚内存大概是怎么运行的就可以了,而且了解了内存,对你理解程序有很大帮助的。
所以不管考不考,还是需要了解的,毕竟以后工作了也是需要扎实的基础的。




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