异常

异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导致的。在Java等面向对象的编程语言中异常属于对象。

一. 辨别程序中异常和错误的区别

错误:无法处理。只能重启环境避免
异常:程序在编译或者执行的过程中可能出现的错误。异常应该避免和处理。

二. 异常的分类

编译时异常:Exception
运行时异常:RuntimeException

(一)常见的运行时异常

数组索引越界异常 ArrayIndexOutOfBoundsException
空指针异常 NullPointerException
类型转换异常 ClassCastException
数字转换异常 NumberFormatException

三. 虚拟机默认处理异常的方式

1.终止程序
2.输出异常栈信息

四. 异常的处理方法

(一)使用throws关键字处理异常

使用throws关键字处理异常,就是自己不处理,抛出去给调用者处理。
基本格式如下:

修饰符 返回值类型 方法名称 throws 异常1,异常2,异常3{
		可能出现错误代码
          }
(二)使用try…catch关键字处理异常

try…catch关键字处理异常,这种方法是自己获取异常,并且自己处理。
基本格式如下:

try{
               可能出现异常的代码。
           }catch(异常类型1 变量){

           }catch(异常类型2 变量){

           }catch(异常类型3 变量){

           }....

但是这种方法很复杂,要列举出所有的异常类型,我们也可以使用如下方法(由于Exception是所有异常的父类,所以可以直接抛出任何类型的异常,再打印异常栈信息就可以得知是什么类型异常),此方法强烈建议使用

try{
               可能出现异常的代码
           }catch (Exception e){
                 // 打印异常栈信息!!
                 e.printStackTrace();
           }

五. 自定义异常类

必须继承Exception/RuntimeException
重写构造器
throw new 自定义异常
范例:

public class AgeXiagaoIllegalException extends Exception{
    public AgeXiagaoIllegalException() {
    }

    public AgeXiagaoIllegalException(String message) {
        super(message);
    }
}
public static void setAge(int age) throws AgeXiagaoIllegalException {
        if(age < 0 || age > 200){
            // 抛出一个编译异常,提醒调用者注意!
            throw new AgeXiagaoIllegalException("年龄不合法");
        }else{
            System.out.println("年龄合法!!");
        }
    }

这里提一下throws和throw的区别:
throws : 把已经出现的异常从方法那里抛出去。用在方法上的
throw:创建一个新异常,从这里抛出去,用在方法里面