Java学习之路(七)
1:什么是异常?
中断了正常指令流的事件。
异常是一个对象 ,在出现异常时,虚拟机会生成一个异常对象
生成对象的类是由 JDK 提供的
上图解释:
Throwable 是所有异常类的基类
Error 是指虚拟机在运行时产生的错误,在出现错误时,虚拟机会关闭
Exception 指异常
RuntimeException 运行时异常(也可称为 uncheck Exception )、
e.g :
class Test{ public static void main(String args[]){ int i= 1/0; } }
错误信息:
错误解释:
在主线程中出现异常 名字为ArithmenticException 即算术异常
:后面为 异常的信息 at后表示位置
.... 代表 check Exception 编译时就会出错
e.g:
class Test{ public static void main(String args[]){ Thread.sleep(1000); } }
2:为避免不友好的错误 ,提高程序的健壮性
引入了try catch() finally
代码:
class Test{ public static void main(String args[]){ try{ System.out.println("1"); int i = 1/0; System.out.println("2"); } catch(Exception e){ e.printStackTrace(); System.out.println("3");
} finally{ System.out.println("4"); } } }
易错的代码放在try里 错误处理放在catch里 finally里放清理资源的代码
3:自定义错误处理
thorw
class Test{ public static void main(String args[]){ User aUser = new User(); aUser.setAge(-20); } } class User{ private int age; public void setAge(int age){ if(age<0){ RuntimeException e = new RuntimeException("年龄不能为负数"); throw e; } this.age = age; } }
throws
声明可能会产生异常 谁调用谁处理
class Test{ public static void main(String args[]){ try{ User aUser = new User(); aUser.setAge(-20); } catch(Exception e){ System.out.println(e); } } } class User{ private int age; public void setAge(int age) throws Exception{ if(age<0){ Exception e = new Exception("年龄不能为负数"); throw e; } this.age = age; } }