认识异常

一、概念

异常:程序运行过程中出现的非正常的情况。
异常处理:当异常出现时,执行预先准备好的程序。
异常处理必要性:减少用户的损失、同时也减少给用户带来的不必要的麻烦;也可以利用异常处理给与用户一些提示。

二、异常的分类

Throwable:Java语言中的异常或是错误的父类,位于 java.lang 包中。
(1) 构造方法
a. Throwable() :无参数的构造方法
b. Throwable(String message):带有异常信息的构造方法
(2) 成员方法:
a. String getMessage():获取字符串类型异常信息
注意:为用户做提示信息而设置的方法。
b. void printStackTrace():打印输出方法调用过程中产生的栈详细异常信息。
注意:此方法为编程人员调试程序而设置的方法。
Error:是Throwable的子类,代表错误
注意:Error通常是仅靠程序本身无法恢复的严重错误
例如:JVM内存不足或是方法调用过程中栈溢出(java.lang.StackOverflowError栈溢出)、
OutOfMemoryError(堆溢出)
Exception:是Throwable的子类,代表异常
(1) RuntimeException:运行时异常、未检查异常,和RuntimeException 有直接或间接继承关系的异常类称为运行时异常
a. 特点:编译器不检测此类异常,编译通过,但是运行报错
b. 处理:运行时异常可处理也可以不处理,此类通过严谨代码可以避免
c. 常见的运行时异常:
① ArrayIndexOutOfBoundsException(数组下标越界)
② StringIndexOutOfBoundsException(字符串下标越界)
③ IndexOutOfBoundsException(集合中下标越界)
④ java.lang.NullPointerException(空指针异常)
⑤ java.lang.ClassCastException(类型转换异常)
⑥ java.lang.NumberFormatException(数字格式转换异常)
(2) 非RuntimeException:非运行时异常、已检查异常,和 RuntimeException没有任何继承关系的异常类称为非运行时异常
a. 特点:编译器检测此类异常,编译报错
b. 处理:非运行时异常一旦出现,必须处理
三、异常的处理

1.throws 声明一个异常,告诉程序员调用此方法需要处理异常:

代码示例

public static void func(int x,int y) throws ArithmeticException{
        if(y == 0) {
            //程序员 想自己手动抛出异常--》一般情况:手动抛出的都是自定义异常
            throw new ArithmeticException("你给的y == 0 不能作为除数!");
        }
        System.out.println(x/y);
    }

2.try{}catch{}

代码示例

 public static void func() throws ArrayIndexOutOfBoundsException{
        int[] array = {1,2,3,4,5,6};
        System.out.println(array[100]);
    }

    public static void main(String[] args) {
        try {
            func();
        }catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界异常");
        }

    }
 finally的注意事项:笔试选择题
*   特性:finally当中的代码是肯定会被执行的
*   1、finally当中的代码是肯定会被执行的 不管是否发生异常
*   2、finally当中千万不要写 return语句
*   3、用于资源的释放
*      例如:I/O   文件  关闭

四、自定义异常类 

定义一个类继承Exception或是其子类,如果定义的类继承了RuntimeException或是RuntimeException的子类,则此异常为运行时异常;如果此类和 RuntimeException没有任 何继承关系,则异常类为非运行时异常
提供两个构造方法:
a. 无参数的构造方法
b. 有参数的构造方法,参数类型为 String,接收异常信息利用super(message); 设置异常信息

练习题:

自定义异常实现登录

public class Test {

    private static String userName = "ys";
    private static String password = "121212";

    static class UserError extends Exception{
        public UserError(String message){
            super(message);
        }
    }
    static class PasswordError extends Exception{
        public PasswordError(String message){
            super(message);
        }
    }


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

    public static void main(String[] args) {
        try {
            login("ys", "121212");
        } catch (UserError userError) {
            userError.printStackTrace();
        } catch (PasswordError passwordError) {
            passwordError.printStackTrace();
        }
    }
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值