1 / 34
文档名称:

第12章 传递和返回对象.doc

格式:doc   大小:130KB   页数:34页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第12章 传递和返回对象.doc

上传人:q1188830 2019/12/11 文件大小:130 KB

下载得到文件列表

第12章 传递和返回对象.doc

相关文档

文档介绍

文档介绍:本教程由yyc,spirit整理清风小木虫美化-----------------------清风小木虫精彩无极限--------------------------第12章传递和返回对象到目前为止,读者应对对象的“传递”有了一个较为深刻的认识,记住实际传递的只是一个句柄。在许多程序设计语言中,我们可用语言的“普通”方式到处传递对象,而且大多数时候都不会遇到问题。但有些时候却不得不采取一些非常做法,使得情况突然变得稍微复杂起来(在C++中则是变得非常复杂)。Java亦不例外,我们十分有必要准确认识在对象传递和赋值时所发生的一切。这正是本章的宗旨。若读者是从某些特殊的程序设计环境中转移过来的,那么一般都会问到:“Java有指针吗?”有些人认为指针的操作很困难,而且十分危险,所以一厢情愿地认为它没有好处。同时由于Java有如此好的口碑,所以应该很轻易地免除自己以前编程中的麻烦,其中不可能夹带有指针这样的“危险品”。然而准确地说,Java是有指针的!事实上,Java中每个对象(除基本数据类型以外)的标识符都属于指针的一种。但它们的使用受到了严格的限制和防范,不仅编译器对它们有“戒心”,运行期系统也不例外。或者换从另一个角度说,Java有指针,但没有传统指针的麻烦。我曾一度将这种指针叫做“句柄”,但你可以把它想像成“安全指针”。和预备学校为学生提供的安全剪刀类似——除非特别有意,否则不会伤着自己,只不过有时要慢慢来,要****惯一些沉闷的工作。,指向的仍然是相同的对象。一个简单的实验可以证明这一点(若执行这个程序时有麻烦,“赋值”)://://Passinghandlesaroundpackagec12;lassPassHandles{staticvoidf(PassHandlesh){("hinsidef():"+h);}publicstaticvoidmain(String[]args){PassHandlesp=newPassHandles();("pinsidemain():"+p);f(p);}}///:~toString方法会在打印语句里自动调用,而PassHandles直接从Object继承,没有toString的重新定义。因此,这里会采用toString的Object版本,打印出对象的类,接着是那个对象所在的位置(不是句柄,而是对象的实际存储位置)。输出结果如下:pinsidemain():******@1653748hinsidef():******@1653748可以看到,无论p还是h引用的都是同一个对象。这比复制一个新的PassHandles对象有效多了,使我们能将一个参数发给一个方法。但这样做也带来了另一个重要的问题。“别名”意味着多个句柄都试图指向同一个对象,就象前面的例子展示的那样。若有人向那个对象里写入一点什么东西,就会产生别名问题。若其他句柄的所有者不希望那个对象改变,恐怕就要失望了。这可用下面这个简单的例子说明://://lassAlias1{inti;Alias1(intii){i=ii;}publicstaticvoidmain(String[]args){Alias1x=newAlias1(7);Alias1y=x;//("x:"+);("y:"+);("Incrementingx");++;("x:"+);("y:"+);}}///:~对下面这行:Alias1y=x;//Assignthehandle它会新建一个Alias1句柄,但不是把它分配给由new创建的一个新鲜对象,而是分配给一个现有的句柄。所以句柄x的内容——即对象x指向的地址——被分配给y,所以无论x还是y都与相同的对象连接起来。这样一来,一旦x的i在下述语句中增值:++;y的i值也必然受到影响。从最终的输出就可以看出:x:7y:7Incrementingxx:8y:8此时最直接的一个解决办法就是干脆不这样做:不要有意将多个句柄指向同一个作用域内的同一个对象。这样做可使代码更易理解和调试。然而,一旦准备将句柄作为一个自变量或参数传递——这是Java设想的正常方法——别名问题就会自动出现,因为创建的本地句柄可能修改“外部对象”(在方法作用域之外创建的对象)。下面是一个例子:

最近更新

2024年事业单位招聘考试山西省朔州市职业能力.. 26页

2024年事业单位招聘考试内蒙古兴安盟职业能力.. 25页

2024年事业单位招聘考试辽宁省鞍山市职业能力.. 23页

2024年事业单位招聘考试浙江省衢州市职业能力.. 24页

2024年事业单位招聘考试山西省太原市职业能力.. 21页

2024年事业单位招聘考试云南省临沧地区职业能.. 23页

2024年事业单位招聘考试江苏省淮阴市职业能力.. 21页

2024年事业单位招聘考试山西省吕梁市职业能力.. 20页

2024年事业单位招聘考试云南省昭通地区职业能.. 20页

2024年事业单位招聘考试辽宁省盘锦市职业能力.. 23页

2024年事业单位招聘考试湖北省宜昌市职业能力.. 24页

2024年事业单位招聘考试山东省潍坊市职业能力.. 23页

2024年事业单位招聘考试山东省泰安市职业能力.. 21页

2024年事业单位招聘考试黑龙江省鹤岗市职业能.. 23页

2024年事业单位招聘考试贵州省六盘水市职业能.. 23页

2024年事业单位招聘考试河南省驻马店地区职业.. 22页

2024年事业单位招聘考试安徽省阜阳市职业能力.. 22页

2024年推进剂利用系统项目资金申请报告代可行.. 70页

2024年头灯项目投资申请报告代可行性研究报告.. 62页

2024年铁氧体粘结永磁磁粉项目资金筹措计划书.. 66页

2024年天猫养车项目资金筹措计划书代可行性研.. 58页

2024年陶瓷生产加工机械项目投资申请报告代可.. 59页

2024年探险旅游项目资金申请报告代可行性研究.. 59页

2024年羧酸项目投资申请报告代可行性研究报告.. 77页

卫生技术人员高级职称评审病案分析报告 肛周脓.. 4页

初中3500常用字 26页

汽车正面碰撞乘员保护 31页

2023年高考物理试卷(全国二卷)(含详细解答) 25页

中石化油卡对账单 1页

2021年嫌疑人X的献身书评优质课件讲义 16页