Bigdata Development Java_Study_08(Exception)

Exception


/*
导致程序中断的错误。
Error:JVM出错,内存不足等。
        不能处理,程序无法恢复。

Exception:代码逻辑错误,程序不严谨。
        可以处理,程序还能继续运行。

运行时异常(unchecked):编译器不要求我们处理的错误。
NullPointerException,ArrayIndexOutOfBoundsException
都是继承自RuntimeException

异常(checked):编译器要求我们必须处理的错误。
继承自Exception

处理异常的两种方式
1。使用try-catch-finally语法处理。
            这是自己处理的方式。
2。使用throw和throws关键字交给方法的调用者进行处理。
            交给别人处理。

抛出(throw)异常,当我们程序运行产生异常,会自动生成异常对象,提交给JVM。
捕获(catch)异常,JVM收到异常对象后,自动寻找能够处理这个异常的代码并把异常对象交给他。



*/


// 自定义异常,继承自 Exception
// 并不是所有会导致程序崩溃的错误叫做异常,
// 所有不符合预期效果的现象都可以叫做异常
public class NumberException extends Exception {

    public NumberException() {
        super();
        // TODO Auto-generated constructor stub
    }

    public NumberException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
        // TODO Auto-generated constructor stub
    }

    public NumberException(String message, Throwable cause) {
        super(message, cause);
        // TODO Auto-generated constructor stub
    }

    public NumberException(String message) {
        super(message);
        // TODO Auto-generated constructor stub
    }

    public NumberException(Throwable cause) {
        super(cause);
        // TODO Auto-generated constructor stub
    }
}



    public void tryCatchTest(int a, int b) {

        // 使用 try-catch 捕获和处理异常

        try {
            // 可能产生异常的代码
            // 从上往下执行,直到产生异常,后续的代码不在执行
            System.out.println("准备开始除法计算");

            int c = a / b;

            System.out.println("除法计算正常执行");

            String text = null;

            // 如果产生多个异常,就需要多个 catch 分别处理
            int lenght = text.length(); 
        }catch (ArithmeticException e) {
            // try 中代码产生异常以后,对异常进行处理
            // e 就是捕获到的异常对象
            // 只要捕获到异常,程序就不会终止,继续向下执行
            // try 中没有产生异常,catch 中的代码就不会执行

            System.out.println("程序产生异常了");
            // 通常不适用 Exception,而是使用具体的异常类型,让异常处理更具有针对性

            // 获取异常的描述信息 e.getMessage()
            System.out.println(e.getMessage());

            // 打印异常产生的堆栈信息,方法调用过程,错误代码位置
            e.printStackTrace();
        }catch (NullPointerException e) {
            // catch 可以有多个,每个 catch 只处理一种异常

            System.out.println("产生了空指针异常");
        }finally {

            // finally 是可选的,可写可不写
            // 无论是 try 还是 catch 执行完后都会执行这里的代码

            System.out.println("finally 执行了");
        }
    }


    // 声明方法的时候,可以通过 throws 说明当前方法可能产生的异常
    // 方法抛出异常,方法内部产生的异常不处理,抛调用方法谁来处理
    public void throwTest() throws ArithmeticException {

        int a = 10;
        int b = 0;

        int c = a / b;
    }


    public void addNumber(int a) throws NumberException {

        // 输入的数字小于 10
        if (a > 10) {
            // 运行时异常由系统抛出
            // 自定义异常都是继承在 Exception 的,
            // 需要使用 throw 关键字手动抛出
            // 告诉方法调用者,方法执行的过程各种产生错误,改如何处理
            throw new NumberException("你输入的数字大于 10");
        }

        int b = a * 10;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值