java异常处理

异常处理的结构

try{
    可能出现异常的语句    
}[catch(异常类型 对象){
    //进行异常处理
}][catch(异常类型 对象){
    //进行异常处理
}][catch(异常类型 对象){
    //进行异常处理
}][finally]{
    无论是否出现异常都要执行的语句
}

案例:编写一个简单的异常

public class Test{
    public static void main(String args[]){
        System.out.println("进行计算");
        try{
            System.out.println(10/0);
        }catch(ArithmeticException e){
            e.printStackTrace();//进行异常输出的方法
        }
        System.out.println("计算结束");
    }
}

运行结果

进行计算
java.lang.ArithmeticException: / by zero
        at Test.main(Test.java:6)
计算结束

Throwable是所有异常的父类,其中有Error,和Exception

Error:指的是jvm异常,此时程序还没有执行;

Exception:指的是程序运行过程中产生的异常

throws关键字:

当程序出现异常之后交给调用处处理,而且调用的时候必须进行异常处理

class MathUtil{
    public static int div(int x,int y) throws Exception{
        return x/y;
    }
}
public class Test{
    public static void main(String args[]){
        try{
            System.out.println(MathUtil.div(10,2));//由于throws的存在,所以此处必须进行异常的处理
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

当某一个方法通过throws抛出异常,那么在调用的时候必须使用try{}catch{}进行处理,如果在主方法上面继续抛出异常则异常交给jvm进行处理

throw关键字:throw可以主动抛出一个异常,然后利用try{}catch{}进行处理

public class Test{
    public static void main(String args[]){
        try{
            throw new Exception("自定义异常");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

throws和throw之间的区别

  throw:指的是在方法中人为的抛出一个异常,这个异常可以是自己定义的也可以是系统定义的异常

  throws:指的是在方法定义定义的时候进行异常的抛出,在该方法被调用的时候必须进行异常的处理

范例:简单的异常代码模型

class MyMath{
    public static int div(int x,int y) throws Exception{ //此处抛出异常交给调用处处理
        System.out.println("计算开始");

        int result = x/y;
        System.out.println("计算结束");
        return result;
    }
}
public class Test{
    public static void main(String args[]){
        try{
            MyMath.div(10,0); //此处出现异常,想让后面的语句也能继续执行,需要在MyMath类中处理x/y这条语句
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

执行结果

计算开始
java.lang.ArithmeticException: / by zero
        at MyMath.div(Test.java:5)
        at Test.main(Test.java:13)

出现异常之后,后面的语句将不再执行,这样的代码不利于程序的运行

范例:改善以上程序

class MyMath{
    public static int div(int x,int y) throws Exception{ //此处抛出异常交给调用处处理
        int result = 0;
        System.out.println("计算开始");
        try{
            result = x/y; //如果出现异常,这句代买不执行
        }catch(Exception e){
            throw e;//抛出异常给方法,方法中因为存在throws,就会把throw抛出异常交给被调用处处理
        }finally{//表示无论是否出现异常都要执行
        System.out.println("计算结束");
        }
        return result;
    }
}
public class Test{
    public static void main(String args[]){
        try{
            MyMath.div(10,0); //此处出现异常,想让后面的语句也能继续执行,需要在MyMath类中处理x/y这条语句
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
计算开始
计算结束
java.lang.ArithmeticException: / by zero
        at MyMath.div(Test.java:6)
        at Test.main(Test.java:18)

RuntimeException类

如果在方法上面通过throws抛出了RuntimeException类或者子类异常,用户可以根据需要尽心选择性处理,如果用户不处理则交给jvm进行处理 

问? Exception和RuntimeException类的区别;

Exception是RuntimeException的父类,throws抛出Exception异常用户必须处理,RuntimeException可以选择性进行处理

RuntimeException常见的子类:NullPointerException,ClassCastException ArithmeticException

assert关键字(断言)

两种形式

1. assert boolean表达式;

2. assert boolean表达式: 基本类型/表达式/object类型;   这里和三目运算符比较相似

在进行程序编译的时候需要手动启用assertion功能

原文地址:https://www.cnblogs.com/hu1056043921/p/7340864.html