异常:运行过程中,将程序发生的不正常的情况成为“异常”;

异常事件大致可分为两种:

  1. Error:JVM系统内部错误,资源耗尽等严重情况。
  2. Exception:其他因编程错误或偶然的外部因素导致的一般问题。

java异常层次如下:

java Filter抛出自定义异常 java自己抛出异常_java Filter抛出自定义异常

 

java碰到异常时,程序往往会中断执行,我们往往通过异常处理机制 阻止程序中断执行 ,其中我们可以处理的异常一般为Exception型的。java异常处理有两种方式捕获 抛出。

异常的捕获大致如下:

public static void main(String[] args) {
        int i = 0;
        try {//在try()中,如果碰到有异常的代码,try里面的剩余代码不会继续执行
            System.out.println(3/i);
        }catch(Exception e) {//当不知道捕获的是什么异常的时候,可以使用所有异常的父类Exception
            e.printStackTrace();//获取异常信息
            System.out.println(e.getMessage());//获取关键异常信息
        }finally{
            System.out.println("----");//此段代码可写可不写,这是捕获异常时最终执行的一段代码
        }
        System.out.println("*******");
        
    }

捕获异常

抛出异常大致如下:

public static void main(String[] args) {//也可以在main方法中继续throws Exception抛出异常
        //main方法中抛出的异常直接抛到了java虚拟机上,就不能再程序中处理了,因此一般不这么做
        B b = new B();
        try {//throws在代码处抛出的异常,在调用捕获处理
            b.test();
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }
    
}

class B{
    int i;
    public void test() throws Exception{//可以使用throws在代码这里抛出异常,交给代码调用出捕获
        B b = null;
        System.out.println(b.i);
    }

抛出异常

我们也可以自定义抛出异常的内容,大致代码如下:

public void test1(int age) throws Exception{
        if(age>=0 && age<=150) {
            System.out.println("年龄是"+age);
        }else {//此处是定义抛出异常的内容
            throw new Exception("年龄不在0-150之间");
        }

自定义抛出异常的内容

我们除了可以自定义抛出异常的内容,我们也可以定义一个异常类,用于抛出,不过java自带的异常已经够用的了,一般不需要我们自己定义异常类 

当子类重写父类的方法是,如果父类方法有抛出异常,那么子类重写的方法不能抛出比父类方法异常更大的异常。