新手看JAVA异常处理机制

异常

  是导致程序中断执行的一种指令流,如果程序出现异常,但是没有经过合理的异常处理,程序就会终止执行。为了保证程序继续向下执行,就需要异常处理。

异常的处理
  • 处理的语法:

    try {
        有可能出现异常的语句;
    } catch (异常类 对象) {
        异常的处理语句;
    } ... catch { // 多条catch语句
        异常的处理语句;
    } finally {
        异常的统一出口;
    }
    

      try 里面存放可能触发异常的代码,catch 捕获并处理你在 try 里面触发的异常,finally 是无论如何都要执行的。即使是 try 引发了一个异常,但是你并没有在 catch 里面对这种异常进行处理,任然会执行 finally 里面的代码,然后 jvm 处理这个异常(就是打印错误信息到控制台)。

  • 关于 finally
    • (一)Java 中有垃圾回收机制,不需要在 finally 中释放内存。但是在要把出内存之外的资源恢复到他们初识状态时,就需要用到 finally。比如:已经打开的文件或网络连接,在屏幕上画的图形。
    • (二)try 中的return 语句执行后任然会执行 finally(先 return 后 finally),return 返回值若在 finally 中进行修改是不会对返回值产生影响的,return 返回值会保存一个自己的副本在栈里面,最后返回的还是这个信息。
  • 取得异常信息

    e.printStackTrace();  // 打印出异常抛出地点的方法的调用序列
    
throws 关键字

  在进行方法定义时,告诉调用者本方法可能产生哪些异常,就可以使用 throws 定义方法。也就是该方法出现问题后,不希望进行处理,就使用 throws 抛出。调用该方法时必须明确使用try…catch 处理或者继续 throws 往上抛出。
  主方法也可以使用 throws 抛出异常,抛出的异常交给 jvm 处理。

    public void function() throws Exception, ...  {} // 可声明多个异常
throw 关键字

  throw 是直接编写在语句之中的,表示人为进行异常抛出。用户不希望异常类对象由系统产生,希望用户控制异常类实例化对象的产生。

    throw new Exception(); 
  • 二者区别:
    • throws 主要在方法声明上使用,告诉用户本方法可能产生的异常,同时该方法可能不处理此异常;
    • throw 用于方法内部,主要表示进行手工异常抛出。
// 综合使用范例:

class Math {
    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;  // 抛出异常,自己不处理
        } finally {
            System.out.println("结束");
        }
        return result;
    }
}
public class Test {
    public static void main(String[] args) {
        try {
            System.out.println(Math.div(10, 0));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
RuntimeException 类

  一些异常时简单的问题,使用不需要进行强制异常处理。如:NullPointerException、ClassCastException、NumberFormatException
  

断言

  assert,JDK1.4开始引入概念。当程序执行到某些语句之后,其数据的内容一定是约定好的内容。使用 -ea 启动断言,若不是则输出推断语句背后的字符串。

int num = 10;
assert num == 300 : "错误,num的值不是300" // 推断,不是程序运行本身,用-ea 启动运行后判断执行
System.out.println(num);
异常类的继承体系

  Java 把所有非正常情况分为两种:Error(错误)、Exception(异常)。错误是指与虚拟机相关的问题,应用程序无法处理这类问题,因此不需要我们关心;而异常信息就需要我们去捕获处理了,但是异常中的 RuntimeException 类并不强制用户去处理异常,会由系统自行处理。而其他异常都必须捕获处理。
异常类继承体系

自定义异常

  继承父类:Exception 或者 RuntimeException;使用时就和使用 Java 自定义异常一样使用。

public class MyException extends Exception{
    public MyException(String msg){
        super(msg);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值