运行时异常和编译时异常 运行时异常:最常用,通知上一层处理 extends RuntimeException 编译时异常:把异常当成返回值处理 比如注册用户的时候,用户提供的用户名已经存在 extends Exception