java异常体系与自定义异常类

(1)Java语言规范将派生于 Error 类或 RuntimeException 类的所有异常称为 非受查异常, 所有的其他异常称为 受查 异常.

(2)如果一段代码可能抛出 受查异常, 那么必须显式进行处理.

如 FileNotFoundException 这样的异常就是受查异常. 如果不显式处理, 编译无法通过.

显式处理的方式有两种:

a) 使用 try catch 包裹起来

示例:


```java
public class Abnormal {
    public static int func() {
//      尝试读一个文件
        File file = new File("d:/test.txt");
        Scanner scanner = null;
        try {
            scanner = new Scanner(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return scanner.nextInt();
    }

    public static void main(String[] args) {
		func();
    }
}


 
 b) 在方法上加上异常说明, 相当于将处理动作交给上级调用者

示例:

```java

public class Abnormal {
    public static int func() throws FileNotFoundException {
//      尝试读一个文件
        File file = new File("d:/test.txt");
        Scanner scanner = new Scanner(file);
        return scanner.nextInt();
    }

    public static void main(String[] args) throws FileNotFoundException {
        func();
    }
}

总之:
对于受查异常,我们必须处理

自定义异常类:

以前我们处理异常方式如下:

public class Abnormal {
    private static final  String USER_NAME = "zhangsan";
    private static final String PASSWORD = "123456";

    public static void login() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String userName = scanner.next();
        if (!userName.equals(USER_NAME)) {
            System.out.println("用户名错误");
            return;
        }
        System.out.println("请输入密码:");
        String password = scanner.next();
        if (!password.equals(PASSWORD)) {
            System.out.println("密码错误");
            return;
        }
        System.out.println("登入成功");
    }
    public static void main(String[] args) {
        login();
    }
}

现在我们可以采用捕获异常来进行:


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

public class Abnormal {
    private static final  String USER_NAME = "zhangsan";
    private static final String PASSWORD = "123456";

    public static void login() throws UserException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String userName = scanner.next();
        if (!userName.equals(USER_NAME)) {
            //TODO 出现情况我们就抛出异常
            throw new UserException("用户名错误");

        }
        System.out.println("请输入密码:");
        String password = scanner.next();
        if (!password.equals(PASSWORD)) {
            throw new UserException("密码错误");
        }
        System.out.println("登入成功");
    }
    public static void main(String[] args) {
        try {
            login();
        } catch (UserException e) {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值