JavaSE之异常

关于异常处理流程

  • 程序先执行try中的代码
  • 如果try中的代码出现异常, 就会结束try中代码的执行, 看和catch的异常类型是否匹配.
  • 如果找到匹配的异常类型, 就会执行对应异常类型的catch语句
  • 如果没有找到匹配的异常类型, 就会把异常向上传递到上层调用者
  • 无论是否找到匹配的异常类型, finally中的代码都会被执行到(如果try或者catch中有return语句, 那就在return之前执行finally中的语句, 如果finally中有return语句, 那么就会直接这个返回语句, 但是一般不建议在finally中写return语句)
  • 如果上层调用者也没能处理的了异常, 那就继续向上传递
  • 一直到main方法也没有合适的代码处理异常, 就会交给JVM来处理, 此时这个程序就会异常终止

关于 Java 异常体系:

  • 顶层的 Throwable, 派生出两个重要的子类: Error 和 Exception;
  • Error 是指 Java 运行时的内部错误和资源耗尽错误,不抛出此类异常,这类错误一旦发生除了告知用户并终止程序外别无他发,一般很少发生;–
  • Exception 是程序猿一般使用的异常类的父类;
  • 其中 Exception 有一个重要的子类: RuntimeException, 这个子类中派生出我们很多常见的异常类如: IndexOutOfBoundException(下标越界异常)、NullPointerException(空指针异常)、ClassNotFoundException(指定的类未找到)、NumberFormatException(字符串转化为数字异常)、ClassCastException(类型转化异常)、NoClassDefFoundException(未找到类定义异常)、SQLException(SQL异常)、NoSuchMethodException(方法不存在异常)。

–Java 语言规范将派生于 Error 类或者 RunTimeException 类的所有异常称为非受查异常,除此之外其他异常称为受查异常.
如果一段代码可能出现受查异常, 那么必须进行显示处理:
1、使用 try catch包裹起来
2、在方法上加上异常说明, 相当于将异常处理动作交给上层调用者(甩锅)

关于自定义异常类:

–通常继承自 Exception 或 RunTimeException
–继承自 Exception 的异常默认为受查异常
–继承自 RunTimeException 的异常默认为非受查异常

代码如下:

import java.util.Scanner;

public class Login {
        private static String name = "yjy";
        private static String password = "123456";

    public static void main(String[] args) throws PasswordException, NameException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名: ");
        String name = scanner.next();
        System.out.println("请输入密码: ");
        String password = scanner.next();
        login(name,password);
    }

    public static void login(String name, String password) throws PasswordException, NameException {
            if (!Login.name.equals(name)) {
                throw new NameException("用户名错误");
            }
            if (!Login.password.equals(password)) {
                throw new PasswordException("密码错误");
            }
        System.out.println("登陆成功!");
    }
}

public class NameException extends Exception {
    public NameException(String message) {
        super(message);
    }
}

public class PasswordException extends Exception {
    public PasswordException(String message) {
        super(message);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值