Throw、Throws、Try 和-Catch区别

ThrowThrowsTry -Catch区别

最近碰到异常处理,在这里好好总结一下:

1、Throw

就是抛出一个一场,并获取这个异常的引用,这个一场会被抛到外部的环境,由外部环境进行处理

 public void func() throws Exception()

        {

            throw new Exception ();

        }

这里抛出一个Exception,他是throwable的子类,是所有异常的基类,

也就是Error。

这里会把Exception这个引用抛到外部环境中去处理。

throw跟try...catch...finally的对比:

public class  ZeroTest{

    public static  void  main(String[] args) {

    try{

      int i = 100/ 0;

      System.out.print(i);

  }catch(Exception e){

      System.out.print(1);

      throw new  RuntimeException();

  }finally{

      System.out.print(2);

  }

     System.out.print(3);

  }

}

 

trycatch是直接处理,处理完成之后程序继续往下执行,throw则是将异常抛给它的上一级处理,程序便不往下执行了。

本题的catch语句块里面,打印完1之后,又抛出了一个RuntimeException,程序并没有处理它,而是直接抛出,

因此执行完finally语句块之后,程序终止了

 

  首先执行try,遇到算术异常,抛出,执行catch,打印1,然后抛出RuntimeException,缓存异常,执行finally,打印2,然后抛出RuntimeException。

  如果catch中没有抛出RuntimeException,则执行结果为123。

 

2.throws

那我们就不得不说一下throws,其实throws并不是抛出一个实际的Exception而是一个异常声明,它声明这个方法可能会抛出一个异常,注意是可能,所以在没有异常的情况下也是可以用throws的,而throws本身的作用也是用来提高程序的健壮性,反过来,如果这个方法的的确确的有一个异常,那么编译器会强制让你加上throws这个异常声明。

通常throws是写在参数列表的后面,这样就表明这个方法有可能会抛出一个异常

class A{
   
public void func() throwsException{
        throw new Exception();
    }
   
    public void
g() throws Exception{
       
    }
}

3.try...catch

当我们在其环境中调用func 和g的时候,编译器会通知我们需要用一个Try catch程序块来处理这个异常。

这个程序块分两块,第一块是try{},第二块是catch(exception的引用){}

try这个程序块很有意思,因为它的名字很易懂,就是尝试,尝试能不能正常的走完整个作用域,如果不能则抛出一个异常。所以我们在try块里经常放上可能会抛出异常的程序段。

而catch恰好就是处理try里抛出来的异常,其中catch的参数列表接收的是一个异常的引用,是throw抛出来的异常的引用,这样我们就可以得到这个异常的对象,倒不如说我们是得到来了这个异常对象的引用,因为在java里,通常我们也只能通过引用来操纵对象。

PS:当 throw newRuntimeException的时候,不用throws

public class Main {
   
public static void main(String[] args){
        A a =
new A();
        try{
            a.func();
            a.g();
        }
        catch(Exception e){
            System.out.println(
"捕获了一个异常");
        }
    }
}

我们捕获了func 的异常,因为我们明确的指明func会抛出一个异常throw new Exception();所以我们这里也会捕获到,并去处理它,所以运行起来我们会看到控制台上会打印“捕获了一个异常”。

尽管g()没有抛出任何的异常,编译器还是要求我们要用trycatch把它括起来,是因为它拥有一个throws 异常说明。

 

**下面是常见的几种异常,供大家参考:

输入输出异常:IOException

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

操作数据库异常:SQLException

文件未找到异常:FileNotFoundException

数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

违背安全原则异常:SecturityException

文件已结束异常:EOFException

字符串转换为数字异常:NumberFormatException

方法未找到异常:NoSuchMethodException

猜你喜欢

转载自blog.csdn.net/yanwenwennihao/article/details/79859986
今日推荐