Java-异常处理机制

一、java中异常处理机制?

按照异常需要处理的时机分为:

       编译时异常(也叫强制性异常、CheckedException)

       运行时异常(也叫非强制性异常、RuntimeException)

 1、编译时异常:Java 认为编译时异常都是可以被处理的异常,所以必须显式处理编译时异常。否则就会发生错误无法编译。处理方法有两种: 
      (1)  当前方法知道如何处理该异常,则用 try…catch 块来处理。 
     (2)  当前方法不知道如何处理,则在定义该方法时使用 throws 声明抛出该异常。

2、 运行时异常:只有当代码在运行时才发现的异常,编译时不需要 try...catch。 运行时异常如数组下标越界等,其产生非常频繁,若显式处理或者捕获会影响程序的可读性和运行效率。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显式捕获它们。


二、java 异常分类?

Java 对异常进行了分类,所有异常的根类为 java.lang.Throwable。

Throwable 下面又派生了两个子类: Error 和 Exception

1、Error 类一般是指与虚拟机相关的问题,如虚拟机错误,内存空间不足,方法调用栈溢出等。对于这类错误导致的程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。 

2、Exception 类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复 
运行。Exception 类又分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception ):

        1)运行时异常:如数学运算异常(ArithmaticException)等,虽然编译能通过,但是一运行就终止了。

        2)受检查的异常:要么用 try... catch 捕获,要么用 throws 字句声明抛出,交给它的父类处理,否则不会通过编译。


三、throw 和 throws 的区别?

1、throw: 用在方法内部,表示手动抛出一个异常实例,由方法体内的语句处理。 

public static void main(String[] args){
    try {
        throw new Exception("抛出异常") ;
    }catch (Exception e) {
        e.printStackTrace();
    }
}

2、throws: 用在方法声明后面,明确告诉调用者使用本方法可能抛出的异常,由调用者进行异常的处理。 并不一定会发生这种异常,可以不处理。

public class Test {
    public static void main(String[] args) throws Exception{
        System.out.println(calculate(10, 0));
    }
    public static int calculate(int x,int y) throws Exception {
        return x/y ;
    }
}

四、Exception与RuntimeException的区别,列举几个常见的RuntimeException:

1. Exception是RuntimeException的父类,使用Exception定义的异常必须使用异常处理,而使用RuntimeException定义的异常可以由用户选择性的来进行异常处理。

2. 常见的RuntimeException有:StackOverFlowError 、ArrayIndexOutOfBoundsException、ClassCastException、NullPointerException、ArrithmeticException等。


五、常见的异常种类:

简单罗列其他一些异常:

算术异常:ArithmeticException

空指针异常:NullPointerException

类型强制转换异常:ClassCastException

数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

违背安全原则异常:SecturityException

文件已结束异常:EOFException

文件未找到异常:FileNotFoundException

字符串转换为数字异常:NumberFormatException

操作数据库异常:SQLException

输入输出异常:IOException

方法未找到异常:NoSuchMethodException

抽象方法错误:AbstractMethodError

用来指示一个断言失败的问题:java.lang.AssertionError

类循环依赖错误:java.lang.ClassCircularityError

类格式错误:java.lang.ClassFormatError

所有错误的基类,用于标识严重的程序运行问题:java.lang.Error

初始化程序错误:java.lang.ExceptionInInitializerError

违法访问错误:java.lang.IllegalAccessError

不兼容的类变化错误:java.lang.IncompatibleClassChangeError

实例化错误:java.lang.InstantiationError

内部错误:java.langInternalError

连接错误:java.lang.LinkageError

未找到类定义错误:java.lang.NoClassDefFoundError

域不存在错误:java.lang.NoSuchFieldError

方法不存在错误:java.lang.NoSuchMethodError

内存不足错误:java.lang.OutOfMemoryError

堆栈溢出错误:java.lang.StackOverflowError

线程结束:java.lang.ThreadDeath

未知错误:java.lang.UnknownError

未满足的链接错误:java.langUnsatisfiedLinkError

不支持的类版本错误:java.lang.UnsupportedClassVersionError

验证错误:java.lang.VerifyError

虚拟机错误:java.lang.VirtualMechineError

算术条件异常:java.lang.ArithmeticException

数组索引越界异常:java.lang.ArrayIndexOutOfBoundsException

数组存储异常:java.lang.ArrayStoreException

类造型异常:java.lang.ClassCastException

找不到类异常:java.lang.NotFoundException

不支持克隆异常:Java.lang.CloneNotSupportedException

枚举常量不存在异常:java.lang.EnumConstantNotPresentException

根异常:java.lang.Exception

违法的访问异常:java.lang.IllegalAccessExcetion

违法的监控状态异常:java.lang.IllegalMonitorStateException

违法的状态异常:java.lang.IllegalStateException

违法的线程状态异常:java.lang.IllegalThreadStateException

索引越界异常:java.lang.IndexOutOfBoundsException

实例化异常:java.lang.InstantiationException

被中止异常:java.lang.InterruptedException

数组大小为负值异常:java.lang.NegativeArraySizeException

属性不存在异常:java.lang.NoSuchFieldException

运行时异常:java.lang.RuntimeException

安全异常:java.lang.SecurityException

类型不存在异常:java.lang.TypeNotPresentException

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值