java异常机制

异常机制

什么是异常

  • 实际工作中遇到的情况不一定是完美的,例,你写某个模块,用户的输入不一定是正确的。你要打开某一个文件可是这个文件不一定存在,或者文件格式不对。你读取数据库数据,但数据库可能是空的。等问题
  • 软件运行过程中,非常可能遇到我能提到的异常问题,异常(exception)。让我们写的程序做出合理的处理,而不至于奔溃。
  • 异常指程序运行中各种不期而至的问题,例,文件找不到,网络异常,非法参数等
  • 异常发生在程序运行期间,它影响正常的程序运行

异常体系结构

  • java把异常当做对象来处理,并定义了一个基类,java.lang.Throwable,作为异常的超类
  • 在java的API中已经定义了非常多的异常类,这些异常类分为两大类,错误(Error)和异常(Exception)

异常

Error

  • Error类对象,由java虚拟机生成并抛出,大多数错误与代码的编写者所执行的操作无关
  • java虚拟机运行错误(Virtual MachineError)。当JVM不再有继续执行操作时的内存资源时,将出现OutOfMemoryError。当这些错误1发生时JVM一般会选择终止线程。

Exception

  • Exception中有一个重要的分支,RunTimeException(运行时异常)

    • NullPointerException:空指针异常

    • ArrayOutOfBoundsException:数组下标越界异常

    • ArithmeticException:数学计算异常

    • ClassNotFoundException:类文件未找到异常

    • MissingResourceException:丢失资源异常

    • 以上异常是不检查的异常,程序中可以选择捕获处理,也可以选择不处理

    • 这些异常一般由程序的逻辑错误引起,程序应该从程序逻辑的角度避免这些错误的出现

  • Error和Exception的区别;Error通常是灾难性的致命错误,是程序无法控制处理的。当出现这些错误时,java虚拟机(JVM)会直接终止线程。Exception通常是可以被程序处理的,并且在程序中应该尽量去处理这些异常

异常的处理机制

  • 抛出异常
  • 捕获异常
  • 吃力异常的五个关键字
    • try
    • catch:捕获
    • finally:无论是否执行都会去做的
    • throw
    • throws
  • 快捷键,Ctrl+Alt+T
package exception;

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

        try {
            new Test().test(1,0);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }

    }

    public void test(int a, int b) throws ArithmeticException{

        //假设这个方法中处理不了这个异常,方法可以向上抛出异常
        if (b == 0) {//主动抛出异常   throw    throws
            throw new ArithmeticException();//主动抛出异常,一般在方法中使用
        }
    }
}


/*
   int a=1;
        int b=0;

        //分母不能为0
        try{//用于监控区域

            if(b==0){//主动抛出异常   throw    throws

                throw new ArithmeticException();//主动抛出异常
            }

            System.out.println(a/b);
        }catch (ArithmeticException e){//catch(想要捕获的异常类型) 用来捕获异常
            System.out.println("程序出现异常");
        }finally {//处理善后工作,无论是否有异常都会执行
            System.out.println("异常处理完毕");
        }//try catch必须要有          finally可有,也可没有,常用于IO流,资源的关闭


        System.out.println("===================================");
        //假设要捕获多个异常,要从小到大
        try{
            new Test().a();
        }catch(StackOverflowError w){
            System.out.println("StackOverflowError出现问题");
        }catch (Exception u){
            System.out.println("Exception出现问题");
        } catch(Error y){
            System.out.println("Error出现问题");
        }catch (Throwable t){
            System.out.println("Throwable出现问题");
        }finally {//处理善后工作,无论是否有异常都会执行
            System.out.println("异常处理完毕");
        }
    }
    //StackOverflowError
    public void a(){
        b();
    }
    public void b(){
        a();
    }
 */



/*
package exception;

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

        //快捷键,Ctrl+Alt+T
        try {
            System.out.println(a / b);
        } catch (Exception e) {
            e.printStackTrace();//打印错误信息
        } finally {
        }
    }
}
 */

自定义异常

  • 使用java内置的异常类可以解决编程时出现的大部分异常,除此之外用户还可以自定义异常。用户自定义异常,只需继承Exception类即可。

  • 在程序中使用自定义异常,可以分为以下几步

    1. 创建自定义异常类
    2. 在方法中通过throw关键字,抛出异常关键字
    3. 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句进行处理。否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,然后进行下一步操作
    4. 在出现异常的方法中,调用者捕获异常并进行处理
  • 异常总结

    • 处理运行时异常时,采用逻辑去合理规避同时使用try-catch去处理
    • 在多重的的catch块后面,可以再加上一个一个catch(Exception)来处理被遗漏的异常
    • 对于不确定的代码,可以使用try-catch,处理潜在异常
    • 尽量去处理异常,切忌只是简单地调用printStackTrace()去输出打印
    • 具体如何处理异常,要跟具不同的业务需求和异常类型去决定
    • 尽量添加finally语句,去释放资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值