zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    yum安装LAMP
    CentOS7添加永久静态路由
    批量解压缩,显示进度条(2)
    Django静态文件配置
    大家同乐一下,搞了三天的字符串与STL!终于搞好了。。
    C++动态分配空间
    UNICODE问题
    VC编码规范 (转)
    vs2008中添加splash screen[分享]
    E
  • 原文地址:https://www.cnblogs.com/yangshixiong/p/12167539.html
Copyright © 2011-2022 走看看