什么是异常
异常是在程序的执行过程中,发生的不正常情况。异常分为两种:错误 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 回收对象前,会调用对象的该方法

346

被折叠的 条评论
为什么被折叠?



