Java 异常的基本概念

什么是异常

异常是在程序的执行过程中,发生的不正常情况。异常分为两种:错误 Error 和 异常 Exception
在这里插入图片描述

问题:Error 与 Exception 的区别

1、Error 表示错误,是一种致命的异常,是 Java 运行环境内部或硬件问题发生的错误。无法通过程序处理,只能退出运行,是虚拟机抛出的。常见的如 OutOfMemoryError、StackOverflowError

2、Exception 是由于程序设计的不完善而导致的一般性问题,可以利用代码解决

3、两种异常都继承自 Throwable


问题:运行时异常与编译时异常的区别

1、编译时异常(受检异常):在代码编译期就有的异常,必须显示处理,否则程序无法通过编译

2、运行时异常(非受检异常):无需显示处理,也可以和编译时异常一样处理,在运行过程中如果发现异常会抛出异常

常见的异常

常见的运行时异常(RuntimeException):

  • NullPointerException:空指针异常
  • ArithmeticException:数字运算异常
  • ArrayIndexOutOfBoundsException:数组下标越界
  • ClassCastException:类型转换异常,当将对象强转为不是实例的子类时抛出
  • NumberFormatException:数字格式不正确异常
  • MissingResourceException:丢失资源
  • IndexOutOfBoundsException:数组角标越界异常
  • IllegalArgumentException:参数异常

常见的编译时异常:

  • SQLException:查询表可能发生的异常
  • IOException:操作文件时,发生的异常
  • FIleNotFoundException:未找到文件
  • ClassNotFoundException:找不到类
  • EOFException:操作文件,到文件末尾,发生异常

自定义异常

继承 Exception 或 RuntimeException 自定义异常类

1、继承 Exception,编译异常

2、继承 RuntimeException,运行异常

public class ... extends Exception {
}
class ExceptionDemo extends RuntimeException {
    public AgeException(String message) {
        super(message);
    }
}
public static void main(String[] args) {
    int age = 80;
    if (!(age >= 18 && age <= 120)) {
        throw new AgeException("年龄需要在 18~120 之间");
    }
}

一般自定义异常都继承 RuntimeException,因为我们可以使用默认的处理机制

在 main 中抛出异常后,main 方法不必显式的去 throws 异常

public static void main(String[] args) throws ExceptionDemo {
    int age = 80;
    if (!(age >= 18 && age <= 120)) {
        throw new ExceptionDemo("年龄需要在 18~120 之间");
    }
}

throw 与 throws 的区别

1、throw 用在方法体内,表示抛出异常的一个动作,抛出的异常可以由方法体内的语句处理。一次只能抛出一个一次对象,如果方法体内不处理,则需要在方法上声明 throws

2、throws 是异常处理的一种方式,是在方法声明时,表名该方法可能产生的所有异常,不做处理直接向上层传递,由方法的调用者来进行异常处理。throws 表示出现的异常的一种可能性,不一定会发生这种异常

public static void method() {
    try {
        throw new RuntimeException();
    } finally {
        System.out.println("B");
    }
}

final、finally、finalize 的区别

1、final 表示最终的意思,由 final 修饰的类无法被继承,修饰的方法无法被重写,修饰的常量无法被修改,修饰的引用无法重新指向

2、finally 提供了异常处理的最终操作,不管异常有没有被捕获或抛出,只要 try 执行了,finally 代码块就会执行,一般用于释放资源

3、finalize 是 Object 的一个方法,在 GC 回收对象前,会调用对象的该方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值