异常处理

异常处理

在程序的编辑和运行期间,会产生人为疏忽或不可避免的程序异常。因此出现了异常处理机制,将java中的异常来封装到一个类中,当遇到错误时,就会抛出异常。异常处理机制提高了程序的可维护性和可阅读性。

异常处理相当于一个安全护栏,如果马路没有安全护栏,汽车行驶过程中如发生偏离 会直接冲出马路导致更严重的后果。异常处理也是同理,在进行一些程序之外的操作或发生不可控的因素时,能够制止。如果没有进行异常处理,会导致程序直接终止。

异常处理的关键字:try、catch、finally、throw、throws

异常处理大致分为两个环节

  1. 抛出异常:使用try关键字生成一个代码块,将代码放入代码块中

  2. 捕获异常:使用catch关键字进行捕获,在catch的括号里输入异常的类型,如果try内的代码出现这个问题,则执行catch代码块中的内容。

 

package com.exception;

public class Demo01 {
   public static void main(String[] args) {
 //0不能作为被除数,当a除以b时,会报错。
       int a = 1;
       int b = 0;

       try {//try监控区域
           System.out.println(a/b);//被监控的代码
      }catch (ArithmeticException e){//捕获异常区域
           System.out.println("异常!!");//如果符合这种类型的异常,就输出
      }finally{//作为善后区域,无论有没有异常都会执行。
           System.out.println("finally");
      }
  }
}

快捷键 : ctrl + Alt + T 自动打开快捷栏,可以选择if、if()else、for、switch……等,当然也包含try、catch、finally。

在异常中,可以大体分为错误Error 与 异常Exception两种形态,Error是不可预见的,一般是程序内存栈溢出之类不是程序主观原因导致的运行时错误。 Exception则属于人为因素导致的异常,如编辑代码出现的错误导致异常,或用户未规范操作程序等因素。java中所有的异常是被Throwable涵盖的。一些常见的异常如下:

 

catch可以重复使用多个,但捕获的异常需要按照异常的大小来排列,由小到大。

package com.exception;

public class Demo02 {
   public static void main(String[] args) {
       int a = 1;
       int b = 0;

       try {
           System.out.println(a/b);
      } catch (Error e) {
           System.out.println("Error");
      }catch (Exception e){
           System.out.println("Exception ");//该异常为Exception
      }catch (Throwable t){
           System.out.println("Throwable");
      }finally {
      }
  }
}

抛出异常

抛出异常:将一个异常给到另外一个方法或类里,由另外一个类进行处理。

所以抛出异常之后,需要再获取异常,这就可以在方法中使用throws抛出异常,然后再在其他地方获取异常进行处理。

在判断某个方法可能会产生异常,但不想在方法中处理这个异常,就可以将异常抛出。在该方法之外处理这个异常。

使用throw与throws关键字来在方法中抛出异常

throw和throws的区别:

  1. throw是用来制造一个异常的,用在方法体中,可以直接在方法体中获取并处理这个异常。 throws用在方法声明的后面,表示将方法中的异常抛出,这样可以在其他地方处理这个方法中的异常。

  2. throw是直接抛出一个异常的实例,无中生有。 throws是声明这个方法可能会出现的异常,以便使用它的调用者知道要捕获这个异常。

  3. throws只是代表一种可能性,可能会出现这种异常。 throw是直接制造出这个异常,所以一定会出现这个异常。

所以,通常我们使用的都是throws关键字,而throw一般用在自定义异常中。

 

throw的使用:

package com.exception;

public class Demo03 {
   public static void main(String[] args) {
       new Demo03().aa();//使用匿名内部类调用这个类
  }
   public void aa(){
       throw new ArithmeticException();//使用throw关键字抛出一个异常
  }
}//运行结果为 ArithmeticExceptio异常

 

 

throws的使用

package com.exception;

public class Demo03 {
   public static void main(String[] args) {

       try {//使用try获取
           new Demo03().aa(1,0);//使用匿名内部类调用这个类
      } catch (ArithmeticException e) {//使用catch处理这个异常
           System.out.println("除数不能为0");
      }

  }
   public void aa(int a,int b)throws ArithmeticException{//使用throws声明这个类可能会出现的异常
       System.out.println(a/b);
  }
}

 

原文地址:https://www.cnblogs.com/jinweichaoyouqu/p/14021493.html