Java(异常)

一、异常

为什么学习异常?

程序员在开发中,会遇到异常BUG,JVM会终止程序,带来体验不好

学习异常的目的

学习异常,有助于帮助开发者能够更好的解决遇到的问题,就算异常了,程序会继续执行下去,并且告诉我们程序哪里出错了。

1、概念

指程序在执行过程中,出现非正常的情况,最终会导致JVM的非正常停止。
异常是一个类,产生异常就是创建异常对象并抛出一个异常对象
java处理异常的方法是中断处理;

2、异常体系结构图

Throwable父类异常
  Error 严重错误:如内存溢出、JVM错误、线程死锁等,程序员无法解决,不做处理
  Exception:程序员能够处理
      RuntimeException 运行时异常
      IOException 输入输出异常

3、异常的分类

编译时异常 Checked异常 受检异常
    ParseException
运行时异常  非受检异常(RuntimeException)
  //算术异常ArithmeticException: / by zero
     int num1 = 10;
     int num2 = 0;
     System.out.println(num1/num2);

  //数组越界异常ArrayIndexOutOfBoundsException
     int[]  arr = new int[3];
     System.out.println(arr[3]);

  //类型转换异常ClassCastException
     Object obj = 10;
     String str = (String)obj;

   //空指针异常NullPointerException
      String s =null;
      System.out.println(s.equals("hello"));

4、处理异常(两种方法)

使用异常机制:try-catch、try-catch-finally、try-finally
1、语法格式:
    书写多重catch块,子类不能放在父类后面,先子类 后父类异常
    try{
      有可能出异常的代码
    }catch(异常类型  异常名){
      出错了,匹配异常
      异常名.printStackTrace();//打印异常堆栈信息的方法
      异常名.getMessage();//打印错误信息
    }

2、匹配顺序:
    try块里面的代码没有出错,则不会执行catch块,继续执行后面的代码
    try块里面的代码出错,匹配catch异常,匹配异常成功,则执行catch块,后面的代码可以继续执行;匹配异常不成功,异常则不会正常的处理,系统直接终止程序,后面的代码会受影响;
finally关键字
1、语法格式
    try{
      放可能出现异常的代码
    }catch(Exception e){
      e.printStackTrace();
      异常匹配处理
    }finally{
      //不管try块有没有发生异常,最终一定都会执行的代码块
      //唯一不执行finally的方法,使用系统退出的方法
      //System.exit(0)表示正常终止,System.exit(-1)非0代表异常终止        }
2、注意事项
  return关键字在异常处理的时候,在try块或者catch块遇到return不会影响finally块的代码的执行,
3、执行流程:加入return关键字
  首先在try块发生异常
  进到catch块捕获异常
  匹配成功,打印异常信息
  遇到return
  再执行finally块
  最后再return返回值
final、finally、finalize的区别
final代表最终的,不能被修改,修饰属性和方法和类;
finally代表try-catch-finally异常里面最终一定会执行的代码块;
finalize是系统使用的方法,当堆区中存在没有引用的空对象,系统会调用垃圾回收器调用此方法;是Object类提供的方法

4、throws & throw

throws:抛多个异常类,在方法的声明上,代表有可能会出现异常
throw:只能new一个,在方法体内,代表一定会出现异常

throws:抛出异常给到调用者来进行处理,谁调用谁就来处理
在方法的声明上定义的异常,可以定义多个异常,以逗号隔开,代表把异常抛给调用者来处理
      抛的是编译时异常,在编写程序的时候,就告诉调用者一定要处理
      抛得是运行时异常,在程序运行时,控制台显示异常

异常两种方法处理:

    继续抛给别人处理Throw & Throws
    自己处理try-catch-finally

5、自定义异常

自定义异常步骤
新建一个类
继承异常(Exception 编译时异常、RuntimeException 运行时异常)
通过调用父类的构造方法,构建异常
posted @ 2021-02-23 11:15  一名初学者  阅读(69)  评论(0)    收藏  举报