
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~
Java异常处理
- 1. 了解异常:
- 2. 异常处理
- 3. 自定义异常
- 4. finally块
 
1. 了解异常:
异常
- 继承/实现 关系:
- Java.lang.Throwable
-  
  - ①Error
- ②Exception—— 异常顶层父类
-  
    - RuntimeException
- 其他异常(编译时异常)
 
 
- ①
- Error:代表系统级别错误(属严重问题),系统一旦出现问题,sun公司就会把这些错误封装成Error对象,Error是给sun公司自己使用,不是提供给开发者使用。
- Exception:异常,代表程序可能出现问题,我们通常会用Exception以及他地子类来封装程序出现的问题(异常)。
- 运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。(如:NullPointerException、ArrayIndexOutOfBoundsException)
- 编译时异常:除去RuntimeException及其子类,其余异常都是编译时异常,是编译阶段就会出现的异常,不解决,程序就无法编译运行。
作用:
- 异常是用于检查bug的关键参考消息。
- 异常可以作为方法内部的一种特殊值返回,以便通知调用者底层的情况。
2. 异常处理
-  ①JVM默认处理方式: 
-  
  - 把异常名称,异常原因以及异常出现的位置等信息输出在了控制台。
- 程序停止运行,下面的代码不会执行。
 
-  ②手动处理方式(捕获异常): 
-  
  -  //捕获异常 使用方式: try{ 可能出现异常的代码; }catch(异常类型 变量名){ 异常处理代码; }
-  好处:可以让程序继续往下执行,不会停止。 
-  Throwable成员方法: 
-  
    - public String getMessage():返回此throwable的详细信息字符串
- public String toString():返回此throwable的简单描述
- public void printStackTrace():把异常的错误信息输出在控制台
 
-  注意: 
-  
    -  若没有异常,catch块不执行。 
-  若存在多个异常,应该设置多个对应的catch块来捕获异常。 
-  有多个catch块时,若待捕获的异常存在继承关系,应当先捕获子类异常再捕获父类异常。 
-  JDK7以后,可以在一个catch块中捕获多个异常,用 |符号分隔。
-  try中遇到异常未被捕获,会使用JVM默认处理方式。 
-  try中捕获到异常就直接跳转到catch块,try中后续代码不会执行。 
 
-  
 
-  
-  ③抛出处理(抛出异常): 
-  1) throws:
-  
  -  //使用: public void 方法名()throws 异常类名1,异常类名2...{ ... }
-  注意: 
-  
    - 写在方法定义处,表示声明一个异常,告诉调用者使用此方法可能会有哪些异常。
- 编译时异常必须要写,运行时异常可以不写。
 
 
-  
-  2) throw:
-  
  -  //使用 public void 方法(){ throw new NullPointerException(); }
-  注意: 
-  
    - throw使用在方法内,会结束方法并手动抛出异常,使得后续代码不再被执行。
 
 
-  
3. 自定义异常
自定义异常:
-  步骤: 
-  
  -  ①定义异常类 
-  
    - Exception作为异常类名的后缀,运行时异常类需继承RuntimeException,编译时异常需继承Exception
 
- Exception作为异常类名的后缀,运行时异常类需继承
-  ②写继承关系 
-  ③空参构造器 
-  ④带参构造器 
-  //①异常类名后缀Exception public class AgeOutOfBoundsException extends RuntimeException{ //②继承关系 //③空参构造 public AgeOutOfBoundsException(){} //④带参构造 public AgeOutOfBoundsException(String message){ super(message); } }
-  遵循见名知意的原则,让控制台报错信息清晰明了,方便错误定位。 
 
-  
4. finally块
-  特性:finally块中的代码一定会被执行,除非JVM退出。 
-  由于一定会被执行的特性,finally{}通常用作资源的释放。 
-  //捕获异常 使用方式: try{ 可能出现异常的代码; }catch(异常类型 变量名){ 异常处理代码; }finally{ //一定会被执行的代码 }
-  注意:当三个块中都出现了return语句,首先记录try{}中return的结果,出现异常时,还会记录catch{}中return的结果,最后记录finallu{}块中的结果,最终返回的是finallu{}块中的结果 





















