异常Exception

异常 Exception

  • 将程序中发生的不正常的情况称为异常。语法和逻辑错误不是异常。
  • 分为两类
    • Error(错误):java虚拟机无法解决的严重问题。
    • Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。分为两大类:运行时异常(逻辑错误,编译器检测不出来,可以不处理)、编译时异常(必须处理)

异常Exception

异常Exception

常见运行时异常

NullPointerException 空指针异常

  • 当程序试图在需要使用的地方使用null

ArithmeticException 数学运算异常

  • 运算不符合数学规则时,比如整数除以0

ArrayIndexOutOfBoundsException 数组下标越界异常

  • 用非法索引访问数组时,比如索引为负数或大于等于数组长度

ClassCastException 类型转换异常

  • 试图将对象强制转换为不是实例的子类

    异常Exception

NumberFormatException 数字格式不正确异常

  • 当应用程序试图将字符串转换成一种数字类型,但该字符串不能转换为适当的格式时。可以用来确保输入是满足条件的数字

编译异常

  • 在编译期间就必须处理的异常,否则编译不通过

  • 常见编译异常

    • SQLException 操作数据库时,查询表可能发生异常
    • IOException 操作文件时,发生的异常
    • FileNotFoundException 当操作一个不存在的文件时
    • ClassNotFoundException 加载不存在的类
    • EOFEException 操作文件,到文件末尾
    • ILLegalArguementException 参数异常

异常处理

  • try-catch-finally和throws二选一即可。
  • 如果没有显式的处理异常,默认采用throws,一层一层的抛,最后抛给jvm

try-catch-finally

try-catch-finally 处理机制

异常Exception

基本语法

try{
    //可疑代码
    //将异常生成对应的异常对象,传递给catch块
}catch(异常){
    //对异常的处理
}
finally{
    //如果没有finally,语法是可以通过的
}

注意事项

  • 如果异常发生了,则try块里面异常发生后面的代码不会执行,直接进入到catch块

  • 如果异常没有发生,则顺序执行try的代码块,不会进入到catch

  • 如果希望不管是否发生异常,都执行某段代码(关闭连接,释放资源),则使用finally{}

  • 可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求子类异常在前,父类异常在后,如果发生异常,只会匹配一个catch(疑问 第一个异常抛出来了后面的代码都不会执行了,第二个异常有用吗?解答:只会匹配一个异常,哪有异常就在哪抛,后面的代码都不会执行了)

    try{
        
    }catch(NUllPointerException e){
    //
    }catch(Exception e)
    
  • 可以进行try-finally配合使用,这种用法相当于没有捕获异常,因此有异常时会运行完finally后直接崩掉。使用场景:执行一段代码,不管是否发生异常,都必须执行某一个业务逻辑

    异常Exception

例题

异常Exception

异常Exception

异常Exception

循环判断用户输入是否是一个整数
public class test {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int i;
    System.out.print("请输入一个整数:");
    while (true) {
      String input = scanner.next();
      try {
        i = Integer.parseInt(input);
        break;

      } catch (Exception e) {
        System.out.print("输入错误,请重新输入:");
      }
    }
    System.out.println("输入正确,你输入的是:" + i);
  }
}

throws

throws 处理机制

异常Exception

基本介绍

  • 如果一个方法执行时可能产生某种异常,但是不确定如何处理这些异常,则此方法应显式的声明抛出异常,表明该方法将不对异常进行处理,而由该方法的调用者负责处理

  • 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是产生的异常类型,也可以是他的父类

    异常Exception

使用细节※

  • 对于编译异常,程序中必须处理,要么使用try-catch,要么使用throws

  • 对于运行时异常,程序中如果没有处理,默认使用throws处理

  • 子类重写父类方法时,对抛出异常的规定:子类重写方法抛出的异常,要么与父类相同,要么是父类异常的子类

异常Exception

异常Exception

自定义异常

定义步骤

1、定义类:自定义异常类名,继承Exception或RuntimeException

2、如果继承Exception,则属于编译异常

3、如果继承RuntimeException,属于运行异常

  • 一般情况自定义异常做成运行时异常,可以使用默认的处理机制
class AgeException extends RuntimeException{
    public AgeException(String message){//构造器
        super(message);
    }
}
public class test{
    public  static void main(String[] args){
        int age =180;
        if(!(age>=18 && age <= 120)){
            throw new AgeException("年龄需要在18-120之间");
        }
           
    }
}

throw与throws区别

异常Exception

异常Exception

异常Exception

异常Exception

上一篇:2021最新Android开发者学习路线,附赠课程 题库


下一篇:idea自动生成trylock