异常:运行过程中,将程序发生的不正常的情况成为“异常”;
异常事件大致可分为两种:
- Error:JVM系统内部错误,资源耗尽等严重情况。
- Exception:其他因编程错误或偶然的外部因素导致的一般问题。
java异常层次如下:
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自带的异常已经够用的了,一般不需要我们自己定义异常类
当子类重写父类的方法是,如果父类方法有抛出异常,那么子类重写的方法不能抛出比父类方法异常更大的异常。