异常机制

Posted zgmzbhqa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常机制相关的知识,希望对你有一定的参考价值。

exception(异常)

异常的体系框架:

技术图片

ArithmeticException是出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。

Error与exception的区别

error:(致命灾难性的错误,程序无法控制,jvm会自动结束进程)

error类对象是虚拟机生成并抛出的(virtulMachineError),大多与代码编写者的操作无关

exception:(程序员可以处理)

1.运行异常:程序逻辑错误,跟个人有很大关系

2.IOException:输入、输出异常

 

运行时异常与非运行时异常区别:

运行时异常:

都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,

这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理

这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。

非运行时异常 (编译异常):

是RuntimeException以外的异常,类型上都属于Exception类及其子类。

从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

异常处理机制:

1.捕获异常

2..抛出异常(处理异常)

 

try {}监控区域

catch{} 抛出异常

catch可以写多个,但捕获异常的类型大小必须是从小到大,否则会报错。

finally{}处理善后工作, try{}内错误与否,都会执行 ,可以不需要

 int a = 10;
        int b = 0;
        try {//监控区域,用于捕获异常
            System.out.println(a/b);
        }catch (Exception e){//抛出异常 catch(想要捕获的异常类型)
            System.out.println("运算错误");
            e.printStackTrace();//打印错误追踪(打印错误信息)
        }finally {//无论监控捕获区域是否出现错误,都会执行 ,可以不需要,用于处理善后工作,如IO,资源,关闭。
            System.out.println("finally");
        }

快捷键包围代码块:先全选需要包围的代码块,再Ctrl+alt+t

 

 

主动抛出异常

1.throw 主动抛出一个异常对象(没有s) 一般在方法里面使用

2.throws 假设这方法中,处理不了这个异常,在方法上抛出异常

public  class A {
    public static void main(String[] args) {
    A a = new A();
    a.test(10,0);

}
public void test(int a,int b)throws ArithmeticException{
    if(b == 0){
        throw new ArithmeticException();
    }
    System.out.println(a/b);//程序会停下来,不会执行
    System.out.println("dif");//程序会停下来,不会执行
}

}

 

自定义异常

1.自定义异常类 ,要继承Exception

public class MyException extends Exception {
   private int num;
public MyException(int num) {
    this.num = num;
}

@Override
public String toString() {
    return "MyException{" + "num=" + num + '}'+"超出范围!";
}

}

public class Test {
public void teat1(int a) throws MyException {
if(a>10){
throw new MyException(a);
}
}

public static void main(String[] args) {
    Test test = new Test();

    try {
        test.teat1(11);
    } catch (MyException e) {
        e.printStackTrace();
    }
}

}

 

 

以上是关于异常机制的主要内容,如果未能解决你的问题,请参考以下文章

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

片段中的Android致命异常

mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command异常已解决(代码片段

mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command异常已解决(代码片段

springcloud报错-------关于 hystrix 的异常 FallbackDefinitionException:fallback method wasn't found(代码片段

片段中的getView()导致抛出异常,不确定原因