• 异常


    异常-Exception

    什么是异常

    实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求...

    异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。

    异常发生在程序运行期间,它影响了正常的程序执行流程。

    简单分类

    1. 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。
      • 要打开一个不存在的文件时,一个异常就发生了
    2. 运行时异常:运行时异常是可能被程序员避免的异常。运行时异常可以在编译时被忽略。
    3. 错误ERROR:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。
      • 当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

    异常体系结构

    • Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的父类。
    • 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误ERROR和异常Exception。

    image-20201122010130885

    Error

    image-20201122012357667

    Exception

    image-20201122012449617

    异常处理机制

    • 抛出异常
    • 捕获异常

    异常处理的五个关键字

    try,catch,finally,throw,throws

    Test.java

    package com.exception;
    
    public class Test {
        public static void main(String[] args) {
            int a = 1;
            int b = 0;
    
            try {
                System.out.println(a/b);
            } catch (Exception e) {
                e.printStackTrace();//打印错误的栈信息
            } finally {
                System.out.println("=================");
            }
    
            try {//try监控区域
                new Test().a();
            } catch (Error e) {
                System.out.println("Error");
            } catch (Exception e) {
                System.out.println("Exception");
            }catch (Throwable e) {
                System.out.println("Throwable");
            }finally {//可以不要finally,常用于IO,资源关闭
                System.out.println("=================");
            }
    
            try {//try监控区域
                if (b==0){
                    throw new ArithmeticException();//主动抛出异常
                }
                System.out.println(a/b);
            } catch (Error e) {
                System.out.println("Error");
            } catch (Exception e) {
                System.out.println("Exception");
            }catch (Throwable e) {
                System.out.println("Throwable");
            }finally {//可以不要finally,常用于IO,资源关闭
                System.out.println("=================");
            }
        }
        public void a(){
            b();
        }
        public void b(){
            a();
        }
    
    }
    

    Test1.java

    package com.exception;
    
    public class Test1 {
        public static void main(String[] args) {
            try {
                new Test1().test(1,0);
            } catch (ArithmeticException e) {
                e.printStackTrace();
            }
        }
    
        //假设这方法中,处理不了这个异常,方法可以把异常抛出
        public void test(int a,int b) throws ArithmeticException{
            if (b==0){
                throw new ArithmeticException();//主动抛出异常
            }
        }
    }
    

    自定义异常

    image-20201122014725362

    MyEception.java

    package com.exception.demo02;
    //自定义异常类
    public class MyEception extends Exception{
        //传递数字>10
        private int detail;
        public MyEception(int a){
            this.detail = a;
        }
    
        //toString:异常的打印信息
    
        @Override
        public String toString() {
            return "MyEception{" +
                    "detail=" + detail +
                    '}';
        }
    }
    

    Test.java

    package com.exception.demo02;
    
    public class Test {
    
        //可能会存在异常的方法
        static void test(int a) throws MyEception{
            System.out.println("传递的参数"+a);
    
            if (a>10){
                throw new MyEception(a);//抛出
            }
            System.out.println("ok");
        }
    
        public static void main(String[] args) {
            try {
                test(11);
            } catch (MyEception e) {
                System.out.println("MyException=>"+e);
            }
        }
    }
    

    实际应用中的经验总结

    image-20201122015758250

  • 相关阅读:
    [bzoj1568]李超线段树模板题(标志永久化)
    [tyvj1860]后缀数组
    [poj3264]rmq算法学习(ST表)
    LintCode-82.落单的数
    LintCode-53.翻转字符串
    LintCode-56.两数之和
    LintCode-379.将数组重新排序以构造最小值
    LintCode-5.第k大元素
    LintCode-3.统计数字
    LintCode-4.丑数 II
  • 原文地址:https://www.cnblogs.com/kikikikikiku/p/14018135.html
Copyright © 2020-2023  润新知