java异常

2021/6/11 12:22:33

本文主要是介绍java异常,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • Error和Exception
  • 捕获和抛出异常
  • 自定义异常

Error和Exception

  1. Error与Exception的区别:

    • 都继承Throwable类

      • Error:

      • 总是不可控制的(unchecked)。

      • 经常用来用于表示系统错误或低层资源的错误。

      • 如何可能的话,应该在系统级被捕捉。

    • Exception:

      • 可以是可被控制(checked) 或不可控制的(unchecked)。

      • 表示一个由程序员导致的错误。

      • 应该在应用程序级被处理。

  2. Java 中定义了两类异常:

    • Checked exception: 这类异常都是Exception的子类 。异常的向上抛出机制进行处理,假如子类可能产生A异常,那么在父类中也必须throws A异常。

      可能导致的问题:代码效率低,耦合度过高。

    • Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们不能通过client code来试图解决,所以称为Unchecked exception 。

  3. 常见的几种 RuntimeException如下:

  • NullPointerException - 空指针引用异常
  • ClassCastException - 类型强制转换异常。
  • IllegalArgumentException - 传递非法参数异常。
  • illegalStateException:在不合理或不正确时间内唤醒一方法时出现的异常信息。换句话说,即 Java 环境或 Java 应用不满足请求操作。
  • ArithmeticException - 算术运算异常
  • ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
  • IndexOutOfBoundsException - 下标越界异常
  • NegativeArraySizeException - 创建一个大小为负数的数组错误异常
  • NumberFormatException - 数字格式异常
  • SecurityException - 安全异常
  • UnsupportedOperationException - 不支持的操作异常
  1. 常见的CheckedException异常:
    我们在编写程序过程中try——catch捕获到的一场都是CheckedException。
    io包中的IOExecption及其子类,都是CheckedException。

    网图

捕获和抛出异常

  1. 抛出异常:如果程序中出现了异常,没有办法将具体的异常打印出来,不做任何处理

  2. 捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的Log

  3. 如果异常出现的话,会立刻终止程序,所以我们得处理异常:

    • 该方法不处理,而是声明抛出,由该方法的调用者来处理(throws)。

    • 在方法中使用try-catch的语句块来处理异常

  4. Java异常机制用到的几个关键字:try、catch、finally、throw、throws。

    • try -- 用于监听。

      将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。

    • catch -- 用于捕获异常。

      捕获try语句块中发生的异常。

    • finally(可以不要) -- finally语句块总是会被执行。

      它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。

    • throw -- 用于抛出异常。

    • throws -- 用在方法签名中,用于声明该方法可能抛出的异常。

      主方法上也可以使用throws抛出。如果在主方法上使用了throws抛出,就表示在主方法里面可以不用强制性进行异常处理,如果出现了异常,就交给JVM进行默认处理,则此时会导致程序中断执行。

    • throw 是语句抛出一个异常;throws 是方法抛出一个异常;

    • 异常类可以声明多个,用逗号分割就可以了。但是要冲小到大捕获,否则会报错

    int a = 0;
    int b = 1;
    try{  //try监控区域
        if (a==0) {
            //为下面的b/做准备,如果a==0,那么必有异常,就不会执行后面的语句了
            throw new ArithmeticException();//主动抛出的异常
        }
        int c = b/a;
    }
    catch(Error error){//catch(想要捕获的异常类型)
        System.out.println("error");
    }catch(Exception e){//catch(想要捕获的异常类型)
    
        System.out.println("exception");
    }catch(Throwable throwable){//catch(想要捕获的异常类型)
        System.out.println("throwable");
    }finally {//异常善后处理,可以不要
        System.out.println("finally");
    }
    

自定义异常

  1. JDK中提供的异常信息不满足目前的使用
  2. 步骤:
    1. 声明一个自定义异常类
    2. 将自定义类继承Exception
    3. 编写两个构造器,一个空的,一个有参数的构造器
//年龄异常,和其它异常一样用就完了
public class AgeException extends Exception{
	public AgeException() {
		
	}
	public AgeException(String msg) {
		super(msg);
	}
}


这篇关于java异常的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程