java入门篇8 ---- 异常处理

对于一个程序来讲,有异常再正常不过,因此我们需要学习,如何捕捉异常,分析异常,

异常分为 Error, Exception,而java规定:

  • 必须捕获的异常,包括Exception及其子类,但不包括RuntimeException及其子类,这种类型的异常称为Checked Exception
  • 不需要捕获的异常,包括Error及其子类,RuntimeException及其子类

因此我们在自定义异常的时候,一般会使用RuntimeException进行继承

import java.util.Scanner;

class BaseException extends RuntimeException {
    // 做一下我们自定义基类的初始化,完全按照RuntimeException写的
    public BaseException() {
        super();
    }

    public BaseException(String message) {
        super(message);
    }

    public BaseException(String message, Throwable cause) {
        super(message, cause);
    }

    public BaseException(Throwable cause) {
        super(cause);
    }
}

// 登陆异常类,这个里面继续扩展各种操作
class LoginException extends BaseException {
    public LoginException() {
        super();
    }

    public LoginException(String message) {
        super(message);
    }

    public LoginException(String message, Throwable cause) {
        super(message, cause);
    }

    public LoginException(Throwable cause) {
        super(cause);
    }
}

public class HelloWorld {
    public static void main(String[] args) throws Exception {
        Scanner s = new Scanner(System.in);
        System.out.println("name: ");
        String name = s.nextLine();
        System.out.println("password: ");
        String pwd = s.nextLine();
        try {  // try catch的捕捉异常语法
            String f = login(name, pwd);
            if (f.equals("success")) {
                System.out.println("登陆成功");
            }
        } catch (LoginException cause) {  // 捕捉异常,必须是这个异常,否则捕捉不到
            System.out.println("登陆失败!");
            cause.printStackTrace();
        } finally {  // 无论如何,都会执行finally
            System.out.println("程序结束");
        }

    }

    public static String login(String name, String pwd) throws LoginException {
        if ("ming".equals(name) && "123".equals(pwd)) {
            return "success";
        } else {
            throw new LoginException("用户名或密码不正确");  // 抛出异常
        }
    }
}
//情况一:
//name:
//ning
//password:
//123
//登陆失败!
//程序结束
//LoginException: 用户名或密码不正确
//    at HelloWorld.login(HelloWorld.java:42)
//    at HelloWorld.main(HelloWorld.java:26)
//情况2:
//name:
//ming
//password:
//123
//登陆成功
//程序结束

在开发阶段,我们也会用到断言,如果断言失败,程序就会退出,因此对于不会导致程序退出的一样,尽量不要用assert,在JVM默认会关闭断言功能,因此如果想要使用可以在终端加上 -ea 参数,断言后面加冒号,写上备注信息,就可以在抛出错误信息时带出,在实际开发中,很少用断言,一般会使用单元测试或者调试,了解就好

public class HelloWorld {
    public static void main(String[] args) throws Exception {
        assert 1 > 2:  "1 大于2";
        System.out.println("end");
    }
}
➜  src java -ea HelloWorld.java
Exception in thread "main" java.lang.AssertionError: 1 大于2
        at HelloWorld.main(HelloWorld.java:3)
原文地址:https://www.cnblogs.com/yangshixiong/p/12167539.html