深爱那片海 发表于 2015-1-18 11:36:04

发布一篇构建器

你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。
为背例编写代码时,我们常常要办理的一个成绩是:“一旦发生背例,会准确地举行扫除吗?”年夜多半时分城市十分平安,但在构建器中倒是一个年夜成绩。构建器将对象置于一个平安的肇端形态,但它大概实行一些操纵——如翻开一个文件。除非用户完成对象的利用,并挪用一个特别的扫除办法,不然那些操纵不会失掉准确的扫除。若从一个构建器外部“掷”出一个背例,这些扫除举动也大概不会准确地产生。一切这些都意味着在编写构建器时,我们必需出格加以寄望。
因为后面刚学了finally,以是人人大概以为它是一种符合的计划。但事变并没有这么复杂,由于finally每次城市实行扫除代码——即便我们在扫除办法运转之前不想实行扫除代码。因而,假设真的用finally举行扫除,必需在构建器一般停止时设置某种情势的标记。并且只需设置了标记,就不要实行finally块内的任何工具。因为这类做法其实不完善(必要将一个中央的代码同另外一个中央的分离起来),以是除非出格必要,不然一样平常不要实验在finally中举行这类情势的扫除。
鄙人面这个例子里,我们创立了一个名为InputFile的类。它的感化是翻开一个文件,然后每次读取它的一行内容(转换为一个字串)。它使用了由Java尺度IO库供应的FileReader和BufferedReader类(将于第10章会商)。这两个类都十分复杂,人人如今能够毫无坚苦地把握它们的基础用法:
//:Cleanup.java
//Payingattentiontoexceptions
//inconstructors
importjava.io.*;

classInputFile{
privateBufferedReaderin;
InputFile(Stringfname)throwsException{
try{
in=
newBufferedReader(
newFileReader(fname));
//Othercodethatmightthrowexceptions
}catch(FileNotFoundExceptione){
System.out.println(
"Couldnotopen"+fname);
//Wasntopen,sodontcloseit
throwe;
}catch(Exceptione){
//Allotherexceptionsmustcloseit
try{
in.close();
}catch(IOExceptione2){
System.out.println(
"in.close()unsuccessful");
}
throwe;
}finally{
//Dontcloseithere!!!
}
}
StringgetLine(){
Strings;
try{
s=in.readLine();
}catch(IOExceptione){
System.out.println(
"readLine()unsuccessful");
s="failed";
}
returns;
}
voidcleanup(){
try{
in.close();
}catch(IOExceptione2){
System.out.println(
"in.close()unsuccessful");
}
}
}

publicclassCleanup{
publicstaticvoidmain(String[]args){
try{
InputFilein=
newInputFile("Cleanup.java");
Strings;
inti=1;
while((s=in.getLine())!=null)
System.out.println(""+i+++":"+s);
in.cleanup();
}catch(Exceptione){
System.out.println(
"Caughtinmain,e.printStackTrace()");
e.printStackTrace();
}
}
}///:~
该例利用了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的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

精灵巫婆 发表于 2015-2-3 12:18:13

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

老尸 发表于 2015-2-8 22:08:50

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

小女巫 发表于 2015-2-13 22:00:04

是一种为 Internet发展的计算机语言

深爱那片海 发表于 2015-2-22 20:15:33

是一种使网页(Web Page)产生生动活泼画面的语言

若天明 发表于 2015-3-2 18:23:42

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

简单生活 发表于 2015-3-11 05:08:54

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

只想知道 发表于 2015-3-17 21:08:19

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

变相怪杰 发表于 2015-3-20 07:28:04

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

爱飞 发表于 2015-3-26 13:13:40

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

飘飘悠悠 发表于 2015-4-2 17:41:53

是一种使网页(Web Page)产生生动活泼画面的语言

兰色精灵 发表于 2015-4-3 00:26:18

Java是一种计算机编程语言,拥有跨平台、面向对java

分手快乐 发表于 2015-4-10 09:26:40

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

灵魂腐蚀 发表于 2015-4-22 07:42:58

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

透明 发表于 2015-4-24 06:59:03

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

活着的死人 发表于 2015-4-26 17:12:04

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

莫相离 发表于 2015-5-9 12:39:00

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

愤怒的大鸟 发表于 2015-5-12 09:13:06

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

再现理想 发表于 2015-6-8 17:14:04

是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
页: [1]
查看完整版本: 发布一篇构建器