美文网首页
java学习笔记(6)——异常处理

java学习笔记(6)——异常处理

作者: 烂笔头2020 | 来源:发表于2022-09-19 16:53 被阅读0次

    所有的异常类是从 java.lang.Exception 类继承的子类。
    Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。
    Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。
    Error 用来指示运行时环境发生的错误。
    例如,JVM 内存溢出。一般地,程序不会从错误中恢复。
    异常类有两个主要的子类:IOException 类和 RuntimeException 类。

    • throw:就是自己进行异常处理,throw一旦进入被执行,程序立即会转入异常处理阶段,后面的语句就不再执行, 而且所在的方法不再返回有意义的值!

    • throws:用来声明一个方法可能抛出的所有异常信息,将异常声明但是不处理,而是将异常往上传,谁调用我就 交给谁处理。

    • try:出现在方法体中,它自身是一个代码块,表示尝试执行代码块的语句。如果在执行过程中有某条语句抛出异常,那么代码块后面的语句将不被执行。

    • catch:出现在try代码块的后面,自身也是一个代码块,用于捕获异常try代码块中可能抛出的异常。catch关键字 后面紧接着它能捕获的异常类型,所有异常类型的子类异常也能被捕获。

    • finally:表示不管异常是否发生,都得进行此方法体中处理,关闭输入流输出流。

    捕获异常

    使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。
    语法如下:

    try
    {
    // 程序代码
    }catch(ExceptionName e1)
    {
    //Catch 块
    }

    下面的例子中声明有两个元素的一个数组,当代码试图访问数组的第四个元素的时候就会抛出一个异常。

    // 文件名 : ExcepTest.java
    import java.io.*;
    public class ExcepTest{
     
       public static void main(String args[]){
          try{
             int a[] = new int[2];
             System.out.println("Access element three :" + a[3]);
          }catch(ArrayIndexOutOfBoundsException e){
             System.out.println("Exception thrown  :" + e);
          }
          System.out.println("Out of the block");
       }
    }
    

    多重捕获异常

    try{
    // 程序代码
    }catch(异常类型1 异常的变量名1){
    // 程序代码
    }catch(异常类型2 异常的变量名2){
    // 程序代码
    }catch(异常类型3 异常的变量名3){
    // 程序代码
    }

    上面的代码段包含了 3 个 catch块。
    可以在 try 语句后面添加任意数量的 catch 块。
    如果保护代码中发生异常,异常被抛给第一个 catch 块。
    如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。
    如果不匹配,它会被传递给第二个 catch 块。
    如此,直到异常被捕获或者通过所有的 catch 块。

    finally关键字

    try{
    // 程序代码
    }catch(异常类型1 异常的变量名1){
    // 程序代码
    }catch(异常类型2 异常的变量名2){
    // 程序代码
    }finally{
    // 程序代码
    }
    finally 关键字用来创建在 try 代码块后面执行的代码块。
    无论是否发生异常,finally 代码块中的代码总会被执行。
    在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。

    throws/throw 关键字:

    throw 和 throws 都是 异常处理中的概念,然而 throw 关键字用来在一个方法或一个代码块中显式的抛出一个异常,throws 关键字用在方法签名中。

    使用throws抛出异常的思路:当前方法不知道如何处理这种类型的异常,该异常应该由上级调用者处理。(附:如果上级调用者也不知道如何处理这种
    类型的异常,也可以使用throws声明抛出异常,该异常将交给JVM处理。JVM对异常的处理方法是,打印异常的跟踪栈信息,并终止程序的运行。)

    public class TestThrows {
        public static int divideNum(int m, int n) throws ArithmeticException {
            int div = m / n;
            return div;
        }
    
        public static void main(String[] args) {
            TestThrows obj = new TestThrows();
    
            System.out.println(obj.divideNum(45, 0)); 
         
        }
    }
    

    throw:则是用来抛出一个具体的异常类型。

    public class TestThrow {  
        //defining a method  
        public static void checkNum(int num) {  
            if (num < 1) {  
                throw new ArithmeticException("\nNumber is negative, cannot calculate square");  
            }  
            else {  
                System.out.println("Square of " + num + " is " + (num*num));  
            }  
        }  
        //main method  
        public static void main(String[] args) {  
                TestThrow obj = new TestThrow();  
                obj.checkNum(-3);  
                System.out.println("Rest of the code..");  
        }  
    }
    

    throws可以单独使用,throw不可以,必须搭配try catch,或者throws,若程序执行到throw exception 语句,则后面的语句不会再执行.

    throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出 了某种异常对象。

    相关文章

      网友评论

          本文标题:java学习笔记(6)——异常处理

          本文链接:https://www.haomeiwen.com/subject/ljamortx.html