Java基础学习之异常处理(6)

@

1.异常是什么

异常就是程序运行中可能会出现的错误,例如文件找不到,网络超时等。
异常Exception的父类时Throwable,Throwable实现了Serializable可序列化,有两个子类:Error和Exception。

1.1.Error

Error错误不是异常,是JVM本身的错误,无法通过代码处理。
后续的JVM相关文章中会说到,以及一些常见的Error和他们出现的情况,这里不赘述了。

1.2.Exception

Exception即异常,程序运行时发生,可通过Java的异常处理机制处理。
Exception又分为检查性异常和运行时异常。
检查性异常:强制需要程序员进行处理的异常,例如IOException类。
运行时异常又称非检查性异常,例如RuntimeException类。

2.异常处理机制

Java中异常的处理过程一般是捕获异常再处理。

2.1.捕获异常

语法:

try {
	//可能会发生异常的代码
} catch (Exception e) {
	//异常处理
} finally {
    //finally子块
}

catch中的Exception为异常类型,多个catch子块可以捕捉多个异常类型。finally子块无论如何都会执行。
例如:

public class TestException {
	public static void main(String[] args) {
		try {
            int i = 1/0;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        	System.out.println("finally");
        }
	}
}

执行结果:

2.2.抛出异常

使用关键字throws将异常抛出给运行时系统,由运行时系统处理异常。
例如:

public class TestException {
    public static void main(String[] args) {
        try {
            test();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void test() throws Exception{
        int i = 1/0;
    }
}

执行结果:

3.自定义异常

之前有区分异常:

  • 检查性异常:继承Exception类
  • 运行时异常:继承RuntimeException类

3.1.自定义检查性异常

例如:网站注册,用户如果年龄低于18报出异常

public class MyException extends Exception {
    public MyException() {
        super();
    }

    public MyException(String msg) {
        super(msg);
    }

    public static void main(String[] args) {
        int age;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的年龄:");
        try {
            age = scanner.nextInt();
            if (age < 18) {
                throw new MyException("你未成年不能注册");
            }
        } catch (MyException e) {
            System.out.println(e.getMessage());
        }
    }
}

执行结果:

3.2.自定义运行时异常

例子和上面一样,修改一些内容:

public class MyException extends RuntimeException {
    public MyException() {
        super();
    }

    public MyException(String msg) {
        super(msg);
    }

    public static void main(String[] args) {
        int age;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的年龄:");
        age = scanner.nextInt();
        if (age < 18) {
            throw new MyException("你未成年不能注册");
        }
    }
}

执行结果:

posted @ 2020-08-26 11:33  liquorppp  阅读(214)  评论(0编辑  收藏  举报