zoukankan      html  css  js  c++  java
  • 异常

    异常-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

  • 相关阅读:
    python基础易错题
    经典案例题2
    经典案例题1
    Http和Https的区别
    爬虫过程中需要注意的问题
    [转]项目规模估计方法介绍
    [转]23种设计模式总结
    [转]分布式session的几种实现方式
    [转]Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)
    [转]【Linux】Linux 目录结构
  • 原文地址:https://www.cnblogs.com/kikikikikiku/p/14018135.html
Copyright © 2011-2022 走看看