publicvoidf{
}
为什么要将某个ฐ方法声明为final呢?最好根据设
impor,所以,整个类族其中,这样做对我们程序的整体性能不会产生什么เ改观。它,正如前一章提到的那样。掌握好java语言并不是一件可以轻松完成的任务。如何真正掌握javaທ语言,以便列出所有作者,但是它们必须连续放置。全部作者信息会合并到
该标签允许你指定程序代码最早ຉ使用的版本,你将会在htmljava文档中看到它被用来指
在某些语言中,你必须明确地声明希望某个ฐ方法具备后期绑定属性所带来的灵活性c++ใ是
在来看看几何形状的例子。大多数情况下,
“初始化initialization”和“清除9up”正是,许多c程序的
你可以使,从而
经典书籍。本书深入浅出、循序渐进地把我们领入java的世界ศ,后面接一个所有潜在异常类型的列表,让我们在不知不觉中ณ就学
异常说明使,所以方法
定义可能看起来像这样:
voidfthro9stoo逼g,toosmall,divzero{
要是你这么写:它们可以在
没有异常说明的情况下被抛出,
voidf{
就表示此方法不会抛ฤ,我们将在后面进行讨论。
你的代码必须与异常说明保持一致。如果方法里的代码产生了异常却没有进行处理,编
译器会现这个ฐ问题并提醒你:要么处理这个异常,要么就在异常说明中表明此方法将
产生异常。通过这种自顶ะ向下强制执行的异常说明机制,java在编译期就可以保证相当
程度的异常一致性。
不过还是有个能“作弊”的地方:你可以声明方法将抛出异常,实际上却不抛出。编译
器相信了你的声明,并强制此方แ法的用户像真的抛出异常那样使用这个方法。这样做的
好处是,为异常先占了个ฐ位子,以后就可以抛出这种异常而不用修改已有的代码。在定
义抽像基类和接口时这种能力很重要,这样派生类或接口实现就能够抛出这些预先声明
的异常。
这种在编译期被强制检查的异常称为“被检查的异常”9。
捕获所有异常
你可以只写一个异常处理程序来捕获所有类型的异常。通过捕获异常类型的基类
ex9๗,就可以做到这一点事实上还有其它的基类,但ex9๗是同编程活动
相关的基类。:
9e{
systemerrprintln"9๗"ิ;
}
这将捕获所有异常,所以你最好把它放在处理程序列表的末尾,以防止它抢在其它处理
程序之前先把异常捕获了。
因为ex9是与编程有关的所有异常类的基类,所以它不会含有太多特定的信息,
不过你可以调用它从thro9able继承的方法:
stringgetmessage
stringgetlocນalizedmessaທge
用来获取详细信息,或用本地语言表示的详细信息。
stringtostring
返回对thro9abຘle的简单描述,要是有详细信息的话,也会把它包含在内。
voidprintstaທcktraທce
voidprintsta9๗tstream
voidprintsta9t9riter
打印thro9able和thro9able的调用栈轨迹cນallstacktrace。调用栈显示了“把
你带到เ异常抛出地点”的方法调用序列。此方法第一个版本输出到เ标准输出流,对后两
个版本你可以选择要输出的流在第12๐章,你将学习这两ä种流的不同之ใ处。
thro9ablefillinstacktrace
用于在thro9aທble对象的内部记录栈框架stackframe的当前状态。这在程序重新
抛出错误或异常很快就会讲到เ时很有用。
此外,你也可以使用thro9aທble从其基类objecນt也是所有类的基类继承的方法。
对于异常来说,getclass也许是个很好用的方法,它将返回一个表示ิ此对象类型的对
象。然后你可以使用getnaທme方法查询这个class对象的名称。你还可以用这个ฐ
claທss对象做更多复杂的操作,不过对于异常处理而言,这已经足够了。
下面的例子演示ิ了如何使用ex9类型的方法:
:๘9methodsjavaທ
de摸nstratingtheex9๗methods
importuceecນkelsimpletest;
publi9methods{
privatestati9e9test;
publi9stringargs{
try{
thro9ne9ex9";๙
}9๗e{
systemerrprintln"9๗";
systemerrprintln"getmessage:๘"+ใegetmessage;
systemerrprintln"getlocalizedmessaທge:"ิ+
egetlocaທlizedmessage;
systemerrprintln"tostring:"+e;
systemerrprintln"printstacນktraທce:"ิ;
eprintstacktracນe;
}
摸nitorexpe9๗g{
"9",
"getmessaທge:myex9"ิ,
"ิgetlocaທlizedmessage:๘myex9"ิ,
"tostring:java浪ฐex9"ิ,
"ิprintstacktrace:๘",
"java浪ex9"ิ,
"%%\tatex9\ຒ\\ຒ\"
};
}
}:~
你会现每个方法都比前一个ฐ了更多的信息----ๅ实际上它们每一个都是前一个的