仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1488|回复: 19
打印 上一主题 下一主题

[学习教程] 发布一篇摹拟渣滓接纳站

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:34:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你通过从书的数量和开发周期及运行速度来证明:net网页编程和ruby要比java简单。
这个成绩的实质是若将渣滓丢进单个渣滓筒,现实上是未经分类的。但在今后,某些特别的信息必需恢复,以便对渣滓准确地回类。在最入手下手的办理计划中,RTTI饰演了关头的脚色(详见第11章)。
这并非一种一般的计划,由于它增添了一个新的限定。恰是这个限定使成绩变得十分风趣——它更象我们在事情中碰着的那些十分贫苦的成绩。这个分外的限定是:渣滓到达渣滓接纳站时,它们全都是夹杂在一同的。程序必需为那些渣滓的分类定出一个模子。这恰是RTTI发扬感化的中央:我们有大批不出名的渣滓,程序将准确判别出它们所属的范例。
  1. //:RecycleA.java
  2. //RecyclingwithRTTI
  3. packagec16.recyclea;
  4. importjava.util.*;
  5. importjava.io.*;
  6. abstractclassTrash{
  7. privatedoubleweight;
  8. Trash(doublewt){weight=wt;}
  9. abstractdoublevalue();
  10. doubleweight(){returnweight;}
  11. //SumsthevalueofTrashinabin:
  12. staticvoidsumValue(Vectorbin){
  13. Enumeratione=bin.elements();
  14. doubleval=0.0f;
  15. while(e.hasMoreElements()){
  16. //OnekindofRTTI:
  17. //Adynamically-checkedcast
  18. Trasht=(Trash)e.nextElement();
  19. //Polymorphisminaction:
  20. val+=t.weight()*t.value();
  21. System.out.println(
  22. "weightof"+
  23. //UsingRTTItogettype
  24. //informationabouttheclass:
  25. t.getClass().getName()+
  26. "="+t.weight());
  27. }
  28. System.out.println("Totalvalue="+val);
  29. }
  30. }
  31. classAluminumextendsTrash{
  32. staticdoubleval=1.67f;
  33. Aluminum(doublewt){super(wt);}
  34. doublevalue(){returnval;}
  35. staticvoidvalue(doublenewval){
  36. val=newval;
  37. }
  38. }
  39. classPaperextendsTrash{
  40. staticdoubleval=0.10f;
  41. Paper(doublewt){super(wt);}
  42. doublevalue(){returnval;}
  43. staticvoidvalue(doublenewval){
  44. val=newval;
  45. }
  46. }
  47. classGlassextendsTrash{
  48. staticdoubleval=0.23f;
  49. Glass(doublewt){super(wt);}
  50. doublevalue(){returnval;}
  51. staticvoidvalue(doublenewval){
  52. val=newval;
  53. }
  54. }
  55. publicclassRecycleA{
  56. publicstaticvoidmain(String[]args){
  57. Vectorbin=newVector();
  58. //FilluptheTrashbin:
  59. for(inti=0;i<30;i++)
  60. switch((int)(Math.random()*3)){
  61. case0:
  62. bin.addElement(new
  63. Aluminum(Math.random()*100));
  64. break;
  65. case1:
  66. bin.addElement(new
  67. Paper(Math.random()*100));
  68. break;
  69. case2:
  70. bin.addElement(new
  71. Glass(Math.random()*100));
  72. }
  73. Vector
  74. glassBin=newVector(),
  75. paperBin=newVector(),
  76. alBin=newVector();
  77. Enumerationsorter=bin.elements();
  78. //SorttheTrash:
  79. while(sorter.hasMoreElements()){
  80. Objectt=sorter.nextElement();
  81. //RTTItoshowclassmembership:
  82. if(tinstanceofAluminum)
  83. alBin.addElement(t);
  84. if(tinstanceofPaper)
  85. paperBin.addElement(t);
  86. if(tinstanceofGlass)
  87. glassBin.addElement(t);
  88. }
  89. Trash.sumValue(alBin);
  90. Trash.sumValue(paperBin);
  91. Trash.sumValue(glassBin);
  92. Trash.sumValue(bin);
  93. }
  94. }///:~
复制代码
要注重的第一个中央是package语句:
packagec16.recyclea;
这意味着在本书接纳的源码目次中,这个文件会被置进从c16(代表第16章的程序)分付出来的recyclea子目次中。第17章的解包工具会卖力将其置进准确的子目次。之以是要如许做,是由于本章会屡次改写这个特定的例子;它的每一个版本城市置进本人的“包”(package)内,制止类名的抵触。
个中创立了几个Vector对象,用于包容Trash句柄。固然,Vector实践包容的是Object(对象),以是它们终极可以包容任何工具。之以是要它们包容Trash(大概从Trash衍生出来的其他工具),独一的来由是我们必要审慎地制止放进除Trash之外的其他任何工具。假如真的把某些“毛病”的工具置进Vector,那末不会在编译期失掉堕落或告诫提醒——只能经由过程运转期的一个背例晓得本人已犯了毛病。
Trash句柄到场后,它们会丧失本人的特定标识信息,只会成为复杂的Object句柄(上溯外型)。但是,因为存在多形性的要素,以是在我们经由过程Enumerationsorter挪用静态绑定办法时,一旦了局Object已外型回Trash,仍旧会产生准确的举动。sumValue()也用一个Enumeration对Vector中的每一个对象举行操纵。
外表上持,先把Trash的范例上溯外型到一个汇合包容基本范例的句柄,再回过火从头下溯外型,这仿佛是一种十分愚昧的做法。为何不但是一入手下手就将渣滓置进得当的容器里呢?(现实上,这恰是扒开“接纳”一团迷雾的关头)。在这个程序中,我们很简单就能够换成这类做法,但在某些情形下,体系的布局及天真性都能从下溯外型中失掉极年夜的优点。
该程序已满意了计划的初志:它可以一般事情!只需这是个一次性的计划,就会显得十分杰出。可是,真正有效的程序应当可以在任什么时候候办理成绩。以是必需问本人如许一个成绩:“假如情形产生了变更,它还能事情吗?”举个例子来讲,厚纸板如今是一种十分有代价的可接纳物品,那末怎样把它集成到体系中呢(出格是程序很年夜很庞大的时分)?因为后面在switch语句中的范例反省编码大概分布于全部程序,以是每次到场一种新范例时,都必需找到一切那些编码。若失慎漏掉一个,编译器除指出存在一个毛病以外,不克不及再供应任何有代价的匡助。
RTTI在这里利用不妥的关头是“每品种型都举行了测试”。假如因为范例的子集必要特别的看待,以是只寻觅谁人子集,那末情形就会变得好一些。但假设在一个switch语句中查找每品种型,那末极可能错过一个重点,使终极的代码很难保护。鄙人一节中,人人会进修怎样慢慢对这个程序举行改善,使其显得愈来愈天真。这是在程序计划中一种十分成心义的例子。
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。
透明 该用户已被删除
沙发
发表于 2015-1-21 10:29:59 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
莫相离 该用户已被删除
板凳
发表于 2015-1-30 15:09:13 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
再见西城 该用户已被删除
地板
发表于 2015-1-30 15:12:09 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
老尸 该用户已被删除
5#
发表于 2015-2-6 13:44:20 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
乐观 该用户已被删除
6#
发表于 2015-2-14 02:43:08 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
第二个灵魂 该用户已被删除
7#
发表于 2015-2-14 09:47:56 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
精灵巫婆 该用户已被删除
8#
发表于 2015-3-4 05:27:26 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
因胸联盟 该用户已被删除
9#
发表于 2015-3-6 09:00:20 | 只看该作者
是一种使用者不需花费很多时间学习的语言
冷月葬花魂 该用户已被删除
10#
发表于 2015-3-9 08:38:28 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
小妖女 该用户已被删除
11#
发表于 2015-3-16 21:06:14 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
蒙在股里 该用户已被删除
12#
发表于 2015-3-17 03:46:07 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
不帅 该用户已被删除
13#
发表于 2015-3-19 08:48:09 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
柔情似水 该用户已被删除
14#
发表于 2015-3-25 13:04:48 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
愤怒的大鸟 该用户已被删除
15#
发表于 2015-3-27 09:09:43 | 只看该作者
是一种使用者不需花费很多时间学习的语言
简单生活 该用户已被删除
16#
发表于 2015-4-10 18:20:07 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
谁可相欹 该用户已被删除
17#
发表于 2015-4-17 11:38:41 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
活着的死人 该用户已被删除
18#
发表于 2015-5-9 14:13:06 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
若天明 该用户已被删除
19#
 楼主| 发表于 2015-6-19 08:00:25 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
小魔女 该用户已被删除
20#
发表于 2015-6-28 14:56:26 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-9 04:57

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表