java异常处理

    xiaoxiao2022-07-07  178

    一. finally的意思是:只要你进入try,不管你是怎样离开的,一定要在离开前执行finally的代码。

    进入try后离开有三种情况:

    (1)没有任何异常发生。这种情况下出来后是不看后面的catch而接着执行下面的代码的,而加了finally后则首先进入finally中来

    执行。

    (2)try中抛出的异常在try后面的catch中捕捉到并处理完了。这种情况下本来是继续执行下面的代码,现在也先进入finally中来执行。

    (3)try中抛出的异常没有在后面的catch中捕捉到,这是try......catch整个就是一个throw,需要继续离开。但加了finally后,将在离开之前先执行finally中的代码。

    package 异常处理; class NoWater extends Exception{ } class NoDrinkableWater extends NoWater{ } public class FinallyWorks { static int count=0; public static void main(String[] args) throws NoWater{ while(true){ try{ count++; System.out.println("第"+count+"次:"); if(count==1){ System.out.println("没事"); } else if(count==2){ System.out.println("抛出异常NoDrinksWater"); throw new NoDrinkableWater(); } else if(count==3){ System.out.println("抛出异常NoWater"); throw new NoWater(); } }catch(NoDrinkableWater e){ System.out.println("NoDrinkableWater"); }finally{ System.out.println("在finally中"); if(count==3){ break; } } } } }

    结果:

    二:throw抛出异常

          throw new Exception()

          

    package practice3; class NoWater extends Exception{} class NoDrinkableWater extends NoWater{} public class FinallyWorks { static int count=0; public static void main(String[] args) throws NoWater {//异常声明 while(true){ try{ count++; if(count==1){ System.out.println("没事"); } else if(count==2){ System.out.println("抛出异常NoDrinkableWater"); throw new NoDrinkableWater();//抛出异常 } else if(count==3){ System.out.println("抛出异常 NoWater"); throw new NoWater();//抛出异常 } }catch(NoDrinkableWater e){ System.out.println("NoDrinkableWater"); }finally{ System.out.println("在finally中打印"); if(count==3){ break; } } } } }

    三:catch匹配 

    (1)try后面可以跟多个catch,catch的匹配按照书写的顺序,一旦有一个catch匹配到了,执行完了这个catch中的异常处理代码后,后面的catch就不管了

    (2)try抛出一个异常,而后面没有任何catch是匹配的,这是整个try.....catch语句变成一个throw

    (3)异常的匹配不是精确匹配,它只要满足这个对象是属于那个类的对象就可以了

       例如下边的:nodrinkablewater是nowater的子类,子类对象属于父类对象,所以抛出的异常属于nowater类型的,所以可以catch到

    package practice4; class nowater extends Exception{}; class nodrinkablewater extends nowater{}; public class water { public static void main(String[] args) { try{ throw new nodrinkablewater(); }catch(nowater e){ System.out.println("nowater"); } } }

    (4)基本类型Exception,所有异常都是都是这个类的子类

    四:关键字 throws--异常声明

      

    最新回复(0)