仓酷云

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

[学习教程] 发布一篇构建器

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:36:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。
为背例编写代码时,我们常常要办理的一个成绩是:“一旦发生背例,会准确地举行扫除吗?”年夜多半时分城市十分平安,但在构建器中倒是一个年夜成绩。构建器将对象置于一个平安的肇端形态,但它大概实行一些操纵——如翻开一个文件。除非用户完成对象的利用,并挪用一个特别的扫除办法,不然那些操纵不会失掉准确的扫除。若从一个构建器外部“掷”出一个背例,这些扫除举动也大概不会准确地产生。一切这些都意味着在编写构建器时,我们必需出格加以寄望。
因为后面刚学了finally,以是人人大概以为它是一种符合的计划。但事变并没有这么复杂,由于finally每次城市实行扫除代码——即便我们在扫除办法运转之前不想实行扫除代码。因而,假设真的用finally举行扫除,必需在构建器一般停止时设置某种情势的标记。并且只需设置了标记,就不要实行finally块内的任何工具。因为这类做法其实不完善(必要将一个中央的代码同另外一个中央的分离起来),以是除非出格必要,不然一样平常不要实验在finally中举行这类情势的扫除。
鄙人面这个例子里,我们创立了一个名为InputFile的类。它的感化是翻开一个文件,然后每次读取它的一行内容(转换为一个字串)。它使用了由Java尺度IO库供应的FileReader和BufferedReader类(将于第10章会商)。这两个类都十分复杂,人人如今能够毫无坚苦地把握它们的基础用法:
  1. //:Cleanup.java
  2. //Payingattentiontoexceptions
  3. //inconstructors
  4. importjava.io.*;
  5. classInputFile{
  6. privateBufferedReaderin;
  7. InputFile(Stringfname)throwsException{
  8. try{
  9. in=
  10. newBufferedReader(
  11. newFileReader(fname));
  12. //Othercodethatmightthrowexceptions
  13. }catch(FileNotFoundExceptione){
  14. System.out.println(
  15. "Couldnotopen"+fname);
  16. //Wasntopen,sodontcloseit
  17. throwe;
  18. }catch(Exceptione){
  19. //Allotherexceptionsmustcloseit
  20. try{
  21. in.close();
  22. }catch(IOExceptione2){
  23. System.out.println(
  24. "in.close()unsuccessful");
  25. }
  26. throwe;
  27. }finally{
  28. //Dontcloseithere!!!
  29. }
  30. }
  31. StringgetLine(){
  32. Strings;
  33. try{
  34. s=in.readLine();
  35. }catch(IOExceptione){
  36. System.out.println(
  37. "readLine()unsuccessful");
  38. s="failed";
  39. }
  40. returns;
  41. }
  42. voidcleanup(){
  43. try{
  44. in.close();
  45. }catch(IOExceptione2){
  46. System.out.println(
  47. "in.close()unsuccessful");
  48. }
  49. }
  50. }
  51. publicclassCleanup{
  52. publicstaticvoidmain(String[]args){
  53. try{
  54. InputFilein=
  55. newInputFile("Cleanup.java");
  56. Strings;
  57. inti=1;
  58. while((s=in.getLine())!=null)
  59. System.out.println(""+i+++":"+s);
  60. in.cleanup();
  61. }catch(Exceptione){
  62. System.out.println(
  63. "Caughtinmain,e.printStackTrace()");
  64. e.printStackTrace();
  65. }
  66. }
  67. }///:~
复制代码
该例利用了Java1.1IO类。
用于InputFile的构建器接纳了一个String(字串)参数,它代表我们想翻开的谁人文件的名字。在一个try块外部,它用该文件名创立了一个FileReader。对FileReader来讲,除非转移并用它创立一个可以实践与之“扳谈”的BufferedReader,不然便没甚么用途。注重InputFile的一个优点就是它同时兼并了这两种举动。
若FileReader构建器不乐成,就会发生一个FileNotFoundException(文件未找到背例)。必需独自捕捉这个背例——这属于我们不想封闭文件的一种特别情形,由于文件还没有乐成翻开。其他任何捕捉从句(catch)都必需封闭文件,由于文件已在进进那些捕捉从句时翻开(固然,假如多个办法都能发生一个FileNotFoundException背例,就必要略微用一些技能。此时,我们可将分歧的情形分开到数个try块内)。close()办法会掷出一个实验过的背例。即便它在另外一个catch从句的代码块内,该背例也会得以捕捉——对Java编译器来讲,谁人catch从句不外是另外一对花括号罢了。实行完当地操纵后,背例会被从头“掷”出。如许做是需要的,由于这个构建器的实行已失利,我们不但愿挪用办法来假定对象已准确创立和无效。
在这个例子中,没有接纳前述的标记手艺,finally从句明显不是封闭文件的准确中央,由于这大概在每次构建器停止的时分封闭它。因为我们但愿文件在InputFile对象处于举动形态时一向坚持翻开形态,以是如许做其实不得当。
getLine()办法会前往一个字串,个中包括了文件中下一行的内容。它挪用了readLine(),后者大概发生一个背例,但谁人背例会被捕捉,使getLine()不会再发生任何背例。对背例来讲,一项出格的计划成绩是决意在这一级完整把持一个背例,仍是举行部分把持,并传送不异(或分歧)的背例,大概只是复杂地传送它。在得当的时分,复杂地传送可极年夜简化我们的编码事情。getLine()办法会酿成:
StringgetLine()throwsIOException{
returnin.readLine();
}
可是固然,挪用者如今必要对大概发生的任何IOException举行把持。
用户利用终了InputFile对象后,必需挪用cleanup()办法,以便开释由BufferedReader和/大概FileReader占用的体系资本(如文件句柄)——正文⑥。除非InputFile对象利用终了,并且到了必要弃之不必的时分,不然不该举行扫除。人人大概想把如许的机制置进一个finalize()办法内,但正如第4章指出的那样,并不是总能包管finalize()取得准确的挪用(即使断定它会挪用,也不晓得什么时候入手下手)。这属于Java的一项缺点——除内存扫除以外的一切扫除都不会主动举行,以是必需知会客户程序员,告知他们有义务用finalize()包管扫除事情的准确举行。

⑥:在C++里,“损坏器”可帮我们把持这一场合排场。

在Cleanup.java中,我们创立了一个InputFile,用它翻开用于创立程序的不异的源文件。同时一次读取该文件的一行内容,并且增加响应的行号。一切背例城市在main()中被捕捉——只管我们可选择更年夜的牢靠性。
这个示例也向人人展现了为什么在本书的这个中央引进背例的观点。背例与Java的编程具有很高的集成度,这次要是因为编译器会强迫它们。只要晓得了怎样操纵那些背例,才可更进一步地把握编译器的常识。
j2EE和asp比较,其实也没什么比的,原因和我上面说那些比较差不了多少,也是稳定性,安全性,J2EE比asp高,速度上比不过asp,asp也是延续着它的拖拽控件的方法,提高速度。
再见西城 该用户已被删除
沙发
发表于 2015-1-21 10:45:07 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
精灵巫婆 该用户已被删除
板凳
发表于 2015-2-3 12:18:13 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
老尸 该用户已被删除
地板
发表于 2015-2-8 22:08:50 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
小女巫 该用户已被删除
5#
发表于 2015-2-13 22:00:04 | 只看该作者
是一种为 Internet发展的计算机语言
深爱那片海 该用户已被删除
6#
 楼主| 发表于 2015-2-22 20:15:33 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
若天明 该用户已被删除
7#
发表于 2015-3-2 18:23:42 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
简单生活 该用户已被删除
8#
发表于 2015-3-11 05:08:54 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
只想知道 该用户已被删除
9#
发表于 2015-3-17 21:08:19 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
变相怪杰 该用户已被删除
10#
发表于 2015-3-20 07:28:04 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
爱飞 该用户已被删除
11#
发表于 2015-3-26 13:13:40 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
飘飘悠悠 该用户已被删除
12#
发表于 2015-4-2 17:41:53 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
兰色精灵 该用户已被删除
13#
发表于 2015-4-3 00:26:18 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
分手快乐 该用户已被删除
14#
发表于 2015-4-10 09:26:40 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
灵魂腐蚀 该用户已被删除
15#
发表于 2015-4-22 07:42:58 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
透明 该用户已被删除
16#
发表于 2015-4-24 06:59:03 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
活着的死人 该用户已被删除
17#
发表于 2015-4-26 17:12:04 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
莫相离 该用户已被删除
18#
发表于 2015-5-9 12:39:00 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
愤怒的大鸟 该用户已被删除
19#
发表于 2015-5-12 09:13:06 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
再现理想 该用户已被删除
20#
发表于 2015-6-8 17:14:04 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-12 11:29

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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