java异常

java异常

异常分类

  1. Throwable是所有异常子类的超类

  2. exception子类:编译器异常,进行编译,java程序出现问题

  3. error子类:错误,必须修改源代码

产生过程

  1. JVM判断异常,并产生包含异常信息的对象,如果异常产生的方法没有try--catch方法,如果没有则把异常对象返回main方法
  2. main方法也判断是否有try-catch方法,如果没有则把这个异常抛回JVM
  3. JVM用红字打印异常的内容、位置、原因

异常的处理

throw关键字
  1. 作用:可以使用throw关键字在指定的方法中怕抛出异常
  2. 使用格式:throw new xxxException("产生原因");
  3. 注意:
    • throw关键字必须写在方法内部
    • throw关键字后边new的对象必须是Exception的子类对象
    • throw关键字抛出指定的异常对象,我们就必须处理这个异常
      1. throw关键字后边创建的是RuntimeException或者RuntimeException的子类对象,我们可以不处理,默认交给JVM处理(打印异常对象,中断程序)
      2. throw关键字后边创建的是编译异常(写代码的时报错),我们就必须处理这个异常,要么throws要么try-catch
  4. Objects非空判断(这个类里边是由静态方法组成,这些方法是null-Save(空指针安全的或者容忍空指针))
public static <T> T requireNonNull(T obj){
	if(obj == null){
		throw new NullPointerException();
	}
	return obj;
}
//判断空指针,是则抛出异常

throws关键字:处理异常的第一种方法
  1. 作用:当方法内部抛出对象的时候,那么就必须处理这个异常对象可以使用throw关键字处理对 象,对象声明抛出给方法调用者处理, 最终交给JVM处理(中断处理)
  2. 使用格式:在方法声明时使用
    修饰符 返回值类型 方法名(参数列表) throw AAAException(){}//抛出的异常可以不止一个,用逗号隔开
  3. 注意:
    • throw关键字必须写在方法声明处
    • throws关键字后边声明异常必须是Exception或者Exception的子类
    • 方法内部如果抛出的对异常对象有子父类关系,那么只写父类就行
try-carch关键字:异常处理的第二种方式,自己处理异常
  1. 格式
try{
    //可能出错的代码
}catch(/*异常类名, 变量名*/){

}
  1. 注意

    • try中可能会抛出多个异常对象,那么就可是使用多个catch来处理异常对象
    • 如果try中产生异常,那么就可以使用多个catch来处理异常对象, 执行catch中的处理逻辑,继续执行try-catch之后的代码
    • 如果try中没有异常, 那么久不会执行catch中处理异常的逻辑
Throwable类中定义了三个处理异常的方法
  • String getMessage()返回此throwable的简短描述
  • String toString()返回此throwable的详细消息字符串
  • void printStackTrace()JVM打印异常对象,默认此方法,打印异常的信息是最全面的
finally代码块
  1. 无论是否出现异常,都会运行

  2. 注意

    • finally不能单独使用,必须和try一起使用
    • fianlly一般用于资源释放(资源回收), 无论是否出现异常,最后都要资源回收
    • trycatch中一般将父类写在下边子类在上
    • finally中如果有return,那么将会返回return
    • 子类方法抛出的异常不能比父类的大
自定义异常
  1. java提供的异常类,不够我们使用,需要自己定义一些异常类格式:
  public class XXXExcepiton extends Exception/RuntimeException{
  				//添加一个空参数的构造方法
  				//添加一个带异常信息的构造方法
  }



  1. 注意
    • 自定义异常类一般都是以Exception结尾,说明该类是一个异常类
    • 自定义异常类,必须的继承Exception或者RuntimeException继承Exception:那么自定义的异常类就是一个编译期异常;如果方法内部抛出了编译期异常,就必须处理这个异常,要么throws,要么try...catch继承RuntimeException:那么自定义的异常类就是一个运行期异常,无需处理,交给虚拟机处理(中断处理)
posted @ 2021-11-02 18:28  老彡  阅读(48)  评论(0编辑  收藏  举报