异常


1. 异常

  • 程序在运行过程中难免会发生错误,为此Java提供了异常处理机制来帮助程序员检查可能出现的错误,对于可能出现的异常都需要预先进行处理
  • 异常也是一个对象,包含了错误信息和处理方法,有的需要手动捕获或抛出称为受检异常(Checked Exception),有的虚拟机自动进行捕获,编译时期通过,处理称为免检异常
  • 异常继承图:

其中Exception及其子类(不包括RuntimeException)是必须捕获的异常

Error及其子类,RuntimeException及其子类是不需要捕获的

  • 常见异常

异常名

解释

VirtualMachineError

虚拟机异常

ReflectionError

反射异常

Error

IOException

IO流异常

DataFormatException

日期格式日常

Exception

ArithmeticException

算术异常

IndexOutOfBoundsException

下标越界

NullPointerException

空指针

ClassCastException

类型转换异常

RuntimeException

2. 异常处理

捕获

try catch finally,把要捕获异常的语句放到try里面

public static void main(String[] args) {
    
    try {
        
        ExceptionTwo();             //会发生算数异常
        System.out.println("try");
        
    }catch (RuntimeException e) {
        
        System.out.println("run");
        e.printStackTrace();        //打印方法调用栈
        
    } catch (Exception e) {
        
        System.out.println("ex");
        
    }finally{
        
        System.out.println("finally");
        
    }
    
    System.out.println("我是异常下面的语句");
    
}

static void ExceptionTwo() {
    ExceptionOne();
}


static void ExceptionOne() {
    int a = 1/0;        //算数异常
}
run
java.lang.ArithmeticException: / by zero
    at exception.Test.ExceptionOne(Test.java:36)
    at exception.Test.ExceptionTwo(Test.java:31)
    at exception.Test.main(Test.java:11)
finally
我是异常下面的语句
  • 发生异常后不执行异常后面的语句,直接跳转catch,最后一定会执行finally(除非用exit,不然return之后也会执行finally里面的语句)
  • 可以有多个catch语句,但要子类放前面,父类放后面,但如果异常不是继承关系,catch条件里面可以用 '|' 逻辑运算符
  • 当执行完finally会继续往finally下面的语句执行
  • 调用顺序从打印语句来看是从下往上,main函数调用ExceptionTwo,ExceptionTwo调用ExceptionOne,ExceptionOne里面有算数异常

抛出

throws在方法声明中抛出,throw在方法体内抛出

当某个方法抛出异常时,如果当前方法没有捕获,异常就会被抛到上层调用方法,直到遇到某个try ...catch被捕获为止

创建异常一般使用匿名函数方式

public static void main(String[] args) {
    
    try {
        ExceptionOne();         //这里被向上抛出的异常需要捕获,或者继续向上抛出
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}


static void ExceptionOne() throws FileNotFoundException {
    File file = new File("D:test.txt");
    FileOutputStream fs = new FileOutputStream(file);//会抛出文件异常,但在方法声明中用了throws向上抛出
}
public static void main(String[] args) throws Exception {
    
    int a = 1; 
    if (a < 2){
        throw new Exception("a小于2了");   //一般继承Exception,然后使用构造函数
    }
}

打印

public class Test {
    
    public static void main(String[] args) {
        
        Logger logger = Logger.getLogger(Test.class);
        
        try {
            
            int a = 1/0;        //会发生算数异常
            
        }catch (RuntimeException e) {
            
            logger.error("测试异常",e);     //  使用log4j日志系统
            
        }
    }
}
  • logger.error(Object message); //只输出信息
  • logger.error(Object message,Throwable a); //输出堆栈

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「JAVA」运行时异常、编译时异常、自定义异常,通过案例实践转译和异常链

    从事Java开发的小伙伴对于“异常”应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出。那究竟什么是异常?异常即非正常的,不同于平常、一般化的情况。

    老夫编程说
  • Java异常处理和设计

    在程序设计中,进行异常处理是非常关键和重要的一部分。一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度。试想一下,如果一个项目从头到...

    Spark学习技巧
  • Java异常知识点思考与总结

    Java 中的异常可以是方法执行过程中引发的,也可以是通过 throw 语句手动抛出的。一旦程序运行过程中发生了异常,JRE 就会试图寻找异常处理程序来处理异常...

    happyJared
  • 困扰开发人员的八大代码异常问题

    代码异常对于每个开发人员时时刻刻要面对的问题,兴奋的写完一段代码,信心满满的运行一下,结果一个异常给你当头 一棒,你还得意吗?异常处理的好不好,考验着每个开发人...

    用户1289394
  • (25) 异常 (下) / 计算机程序的思维逻辑

    上节我们介绍了异常的基本概念和异常类,本节我们进一步介绍对异常的处理,我们先来看Java语言对异常处理的支持,然后探讨在实际中到底应该如何处理异常。 异常处理...

    swiftma
  • 【Java入门提高篇】Day16 Java异常处理(上)

      异常嘛,顾名思义就是不正常,(逃),是Java程序运行时,发生的预料之外的事情,它阻止了程序按照程序员的预期正常执行。

    弗兰克的猫
  • 【Java入门提高篇】Day16 Java异常处理(上)

    弗兰克的猫

扫码关注云+社区

领取腾讯云代金券