Java基础 -- 异常Exception

异常层次结构:

编译(checked)异常:指的是,代码在编译的时候,JVM就检查代码的正确性,从而抛出编译时就已能发现的异常

运行(unchecked)异常:指的是,代码在运行的过程中有可能抛出的异常,我们自定义异常时都是继承RuntimeException


自定义异常类:

都是继承RuntimeException的。之所以自定义业务异常,完全是为了起一个业务名字的异常类,抛开这一点,我们的程序中其实没必要自定义异常类的,就在代码有可能抛出异常的地方 new RuntimeException("我的业务异常描述信息");足够用!

通过以上图的示例会发现,当我们自己编写程序时,需要某种业务不合理时,就抛出异常,我们自定义的异常都是继承RuntimeException的,小示例:

public class A
{
        /**
         * 方法内部:当发现某种业务不符合我们的预期时,不捕获异常,手动抛出异常
         */
	public static void a(){
	    throw new RuntimeException("a()方法内部:throw new RuntimeException!");
	}

        /**
         * 方法内部:当发现某种业务不符合我们的预期时,捕获异常后可以再次抛出它
         */
	public static void b(){
	    try{
		int x= 1/0;
	    }catch(Exception e){
                e.printStackTrace();
		throw new RuntimeException("zero 0");
	    }
	}

        /**
         * 方法声明:运行时unchecked异常是可以不用捕获,不用声明的      
         */
        //public static void c() throws ArithmeticException {
	public static void c() {
	    int x= 1/0; //此句导致异常java.lang.ArithmeticException
	}

        /**
         * 方法声明:编译checked异常,如果方法体内没捕获,必须在声明方法时throws
         */
	public static void d() throws ClassNotFoundException{
	    Class.forName("ddd");
	}

	public static void main(String[] args) {
	    //a(); 
	    //b();
	    //c();

            try{
                d();
            }
            catch(Exception e){}
	}
}

异常运行机制:

异常概念:

Error:运行时系统错误,程序无法管,JVM虚拟机的事
Exception:自定义异常都是继承RuntimeException的,程序可以捕获和处理异常

try{}块:try块内有可能抛出异常,try内的return;是指退出try块
catch(Exception e){}块:捕获异常加以处理,可再次抛出异常,catch内的return;是指退出try块
finally{}块:一定会被执行的,finally内的return;是指从当前方法返回

链式异常:

链式异常:引起当前异常的背后异常
    初始化:Throwable(String msg, Throwable causeExcp) //构造异常,背后异常是causeExcp
    获取背后异常:getCause() //如果当前异常有背后异常就返回,没有背后异常就返回null
    设置背后异常:initCause(Throwable causeExcp) //设置当前异常的背后异常为causeExcp

异常新特性:

JDK7新增异常特性:
    资源自动释放:try(资源){}catch(E e){}
    多重捕获:catch(MyExceptionx | MyExceptiony e){}

异常传递:

如果异常没捕获,则异常传至上层调用方法直至JVM虚拟机。JVM默认异常处理机制,就是打印出异常的堆栈追踪信息并停止程序。

猜你喜欢

转载自blog.csdn.net/mmlz00/article/details/85224266