《Java语言入门》

下载本书

添加书签

Java语言入门- 第11节


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
soup。add(c);//printarecordofosraddition
System。out。println(”Added”+c+”tothesoup。”);//waitabitbeforewe
addthenextlettertry{sleep((int)(Math。random()*1000));}catch
(InterruptedExceptione){}}}}
注意我们创建了Soup类的一个实例。生产者用soup。add()函数来建立字符池。
7。3。3消费者
让我们看看消费者的程序:classConsumerextendsThread{privateSoupsoup;
publicConsumer(Soups){//keepourowncopyofthesharedobjectsoup
=s;}
publicvoidrun(){charc;//Eat10lettersfromthealphabetsoupfor
(intI=0;ijavaExc0java。lang。arithmeticException:/byzeroatExc0。main(Exc0。java:4)
8。4try与catch
通常我们希望自己来处理”异常”并继续运行。可以用try来指定一块预防所有”异常”的的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的”异常”的类型。例如,下面的例子是在前面的例子的基础上构造的,但它包含一个try程序块和一个catch子句。classexc1{publicstaticvoidmain(stringargs''){try{intd=0;inta=42/d;}catch(arithmeticexceptione){system。out。println(”divisionbyzero”);}}}
catch子句的目标是解决”异常”情况,把变量设到合理的状态,并象没有出错一样继续运行。如果一个子程序不处理某个”异常”,则返到上一级处理,直到最外一级。
8。5多个catch子句
在某情况下,同一段程序可能产生不止一种”异常”情况。你可以放置多个catch子句,其中每一种”异常”类型都将被检查,第一个与?reg;匹配的就会被执行。如果一个类和其子类都有的话,应把子类放在前面,否则将永远不会到达子类。下面是一个有两个catch子句的程序的例子。
classMultiCatch{publicstaticvoidmain(Stringargs''){try{inta
=args。length;System。out。println(”a=”+a);intb=42/a;intc''=
{1};c'42'=99;}catch(ArithmeticExceptione){System。out。println(”div
by0:”+e);}catch(ArrayIndexOutOfBoundsExceptione)
{system。out。println(”arrayindexoob:”+e);}}}
如果在程序运行时不跟参数,将会引起一个0做除数的”异常”,因为a的值为0。如果我们提?copy;一个命令行参数,将不会产生这个”异常”,因为a的值大于0。但会引起一个ArrayIndexOutOfBoundexception的”异常”,因为整型数组c的长度是1,却给c'42'赋值。下面是以上两种情况的运行结果。
C:》javaMultiCatcha=0divby0:java。lang。arithmeticexception:/by
zeroC:》javaMutiCatch1a=1arrayindexoob:
java。lang。ArrayIndexOutOfBoundsException:42
8。6try语句的嵌套
你可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部,写另一个try语句保护其他代码。每当遇到一个try语句,”异常”的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种”异常”进行处理,堆栈就会展开,直到遇到有处理这种”异常”的try语句。下面是一个try语句嵌套的例子。
classMultiNest{staticvoidprocedure(){try{intc''={1}:c'42'
=99;}catch(ArrayIndexOutOfBoundsexceptione)
{System。out。println(”arrayindexoob:”+e);}}publicstaticvoid
main(Stringargs''){try{inta=args。length;system。out。println(”a
=”+a);intb=42/
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架