锁定老帖子 主题: corejava辅导(7--3)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-03
finally关键字
finally{……}在finally语句块中的代码无论如何都会运行
try,catch后还可以再跟一个finally块。finally块中的代码语句无论如何(无论有没有异常)都会执行(finally块多写一些释放资源,关闭连接的代码)。finally块中的代码在和try块中的代码的冲突时,finally块中的代码一定会执行且会忽略try块中的代码。但是System.exit(0);(虚拟机退出语句)后则不执行fianlly中的代码。
try{..}catch(..){..} try{..}catch(..){..}finally{..} try{..}finally{..} 以上三种写法都可以。
程序中抛出异常就要处理,无论是使用throws,还是用捕获是用try,catch,不对异常进行处理,编译不通过。
如何知道在编写的程序中会出现例外呢 1.调用方法,查看API中查看方法中是否有已检查错误。 2.在编译的过程中看提示信息,然后加上相应的处理。
Throwable有一个message属性。在使用catch的时候可以调用:
try{……}Catch(IOException e){System.out.println(e.message());}//异常的信息的显示 try{……}Catch(IOException e){e. printStackTrace();}//异常堆栈信息的显示
printStackTrace()方法是打印异常堆栈信息,是常用的异常处理的访法,它是异常的方法。
以上两条语句都可打印出错的信息。告诉我们出错类型及代码的运行过程,在调试的中非常有用。
例: public class TestHundredException{ public static void main(String[] args){ MyClass mc=new MyClass(); try{//在这个try语句块中抛出的异常会得到处理 System.out.println(mc.add(10,80)); } catch(HundredException e){ //捕获try块中抛出的异常 e.printStackTrace(); } try{ System.out.println(mc.add(30,70)); } catch(HundredException e){ e.printStackTrace(); }finally{ System.exit(0); } } } class HundredException extends Exception{//自定义异常 public HundredException(String message){ super(message); } }
class MyClass{ public int add(int a,int b) throws HundredException{ int c=a+b; if (c==100) { throw new HundredException("a+b can\'t be 100"); else{ return c; } } }
自定义异常
自定义异常要是Exception的子类,以下是一个例子: 自己定义异常类必须是Excepiton或者RuntimeException的子类。
public class TestMyException{ public static void main(String[] args){ int n=Integer.parseInt(args[0]); A a=new A(); try{ a.calculate(n); } catch(Exception e){ e.printStackTrace(); } System.out.println("OK"); } } class A{ public void calculate(int n) throws ZhiShuException{ for(int i=2;i<n;i++){ if (n % i == 0) return; } throw new ZhiShuException(n+" is a Prime Number"); } }
class ZhiShuException extends Exception{//自定义的异常,是Exception的子类 public ZhiShuException(String message){ //注意在构造父类对象时需要String类型的message作为参数 super(message); } }
开发中的两个道理: ① 如何控制try块的范围:根据操作的连动性和相关性,前面的程序代码块抛出的异常影响了后面程序代码的运行,这两个段程序代码就存在关联,应该放在同一个try块中。
② 对已经查出来的例外,有throw(消极)和try {…}catch(…){…}(积极)两种处理方法。对于throws把异常抛到try catch能够恰当地处理异常的位置(即放在具备对这个异常进行处理的能力的位置)。没有处理异常的能力就将异常继续上抛。
throw是一个语句,用来做抛出例外的功能。 throws是表示本方法中会异常抛出,本方法不做处理,将异常对象向上抛出。 throws写的是异常类型,throw后写的是要抛出的异常对象。
注意:方法的覆盖中,如果子类的方法抛出的例外是父类方法抛出的例外的父类型,那么编译就会出错:子类无法覆盖父类。
结论:子类方法不可比父类方法抛出更多的例外。子类抛出的例外或者与父类抛出的例外一致,或者是父类抛出例外的子类型。或者子类型不抛出例外。如果父类型无throws时,子类型也不允许出现throws。此时只能使用try catch。
断言是一种调试工具(assert)
其后跟的是布尔类型的表达式,如果表达式结果为真不影响程序运行。如果为假系统出现低级错误,在屏幕上出现assert信息。 Assert只是用于调试。在产品编译完成后上线assert代码就被删除了。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1005 次