zoukankan      html  css  js  c++  java
  • 异常

    异常

    异常的根类是java.lang.Throwable,其包括ErrorException两个子类。Error我们不能解决,如内存溢出等。但是Exception可以避免(编译异常、运行时异常等)。

    try、catch、finally、throw、throws

    throw抛出异常

    应用于方法内,如:用if语句判断是否超过索引,如果是就抛出异常:

    throw new ArrayIndexOutOfBoundsException("数组越界");

    public class Test {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4};
            int index = 10;
            if (index >= 4) {
                throw new ArrayIndexOutOfBoundsException("数组越界");
            } else {
                System.out.println(arr[index]);
            }
        }
    }
    

    throws声明异常

    应用于方法之上,格式:public void method() throws XxxException {}

    • 如果方法内部有抛出异常,throws后面必须声明。
    • 声明了异常,要么继续抛给方法的调用者,要么交给tray{}catch
    public class Test {
        public static void main(String[] args) throws ArrayIndexOutOfBoundsException{
            int[] arr = {1, 2, 3, 4};
            int index = 10;
            if (index >= 4) {
                throw new ArrayIndexOutOfBoundsException("数组越界");
            } else {
                System.out.println(arr[index]);
            }
        }
    }
    

    try..catch捕获异常

    如果不throws异常,那么可以捕获异常,自己处理。一般在工作中,会把异常信息记录在日志。

    • catch可以有多个,不能重复,子异常先与父异常处理。
    public class Test {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4};
            int index = 10;
            try {
                System.out.println(arr[index]);
            } catch (ArrayIndexOutOfBoundsException e) {
                System.out.println("数组越界");
                System.out.println(e.getMessage()); // 简短描述
                System.out.println(e.toString());      // 详细描述
                e.printStackTrace();      // 最全面信息
            }
            System.out.println("后续代码也会运行");
        }
    }
    

    子类继承父类时,对抛出异常的处理:

    • 父类有抛出异常,子类可以抛出相同的异常,或者抛出子异常,或者不抛出;
    • 父类没有抛出异常,子类也可以抛出,但必须捕获。

    自定义异常类

    需要继承两个类:

    • java.lang.Exception编译异常,要么trows,要么try{}catch
    • java.lang.RuntimeException运行异常,交给虚拟机处理

    例子:模拟注册,如果用户存在,则抛出异常

    import java.util.*;
    
    public class Test {
        static String[] usernames = {"张三", "李四", "王五"};
    
        public static void main(String[] args) {
            System.out.println("请输入您要注册的用户名: ");
            Scanner sc = new Scanner(System.in);
            String username = sc.next();
            check(username);
        }
    
        public static void check(String username) {
            for (String name : usernames) {
                if (name.equals(username)) {
                    try {
                        throw new MyException("用户名已注册!!!");
                    } catch (MyException e) {
                        e.printStackTrace();
                        return; // 结束
                    }
                }
            }
            System.out.println("恭喜您,注册成功!");
        }
    
    }
    
    class MyException extends Exception {
        public MyException() {
        }
    
        public MyException(String message) {
            super(message);
        }
    }
    
  • 相关阅读:
    Android手势锁实现
    网页模板pug基本语法
    React入门看这篇就够了
    我曾站在离你最近的天涯
    一文看懂浏览器事件循环
    Vi编辑网卡
    2019.6.11_MySQL进阶二:主键与外键
    2019.6.13_笔试题目及答案
    2019.6.13_MySQL简单命令的使用
    2019.6.13_SQL语句中----删除表数据drop、truncate和delete的用法
  • 原文地址:https://www.cnblogs.com/mingriyingying/p/13581011.html
Copyright © 2011-2022 走看看