zoukankan      html  css  js  c++  java
  • Java异常

    1.异常引入

    package exception;
    @SuppressWarnings({"all"})
    /**
     * @Author Blueshadow
     * @Date 2021/7/30 11:01
     * @Version 1.0
     */
    public class exception {
        public static void main(String[] args) {
            //通过try...catch...异常处理机制来处理异常,从而保证程序的健壮性
            int a = 10;
            int b = 0;
            int num = 0;
            try {
                num = a / b;//尝试执行
            } catch (Exception e) {//捕获错误
                System.out.println("异常信息是"+e.getMessage());
            }
            System.out.println("程序继续执行");
            System.out.println("num="+num);//程序抛出ArithmeticException异常,程序结束执行
    
        }
    }
    
    

    2.异常介绍

    • 为基本概念:Java语言中,将程序执行中发生的不正常现象称为异常,语法错误和逻辑错误不是异常。
    • 异常的分类:
      • Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:栈溢出。Error错误是严重错误,程序会崩溃。
      • Exception:其他原因编程错误或偶然的外在因素导致的一般性问题,可以通过针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等,Exception分为两大类,运行时异常和编译时异常。

    3.异常体系

    4.五大运行时异常(RuntimeException)

    4.1NullPointException空指针异常

    当程序试图在需要对象的地方使用null时,抛出该异常。

    package exception;
    @SuppressWarnings({"all"})
    /**
     * @Author Blueshadow
     * @Date 2021/7/30 11:01
     * @Version 1.0
     */
    public class exception {
        public static void main(String[] args) {
            String name = null;
            System.out.println(name.length());
            //Exception in thread "main" java.lang.NullPointerException
        }
    }
    
    

    4.2ArithmeticException数学运算异常

    当出现异常的运算条件的时候,抛出该异常。

    package exception;
    @SuppressWarnings({"all"})
    /**
     * @Author Blueshadow
     * @Date 2021/7/30 11:01
     * @Version 1.0
     */
    public class exception {
        public static void main(String[] args) {
            int a = 10;
            int b = 0;
            int count = a/b;
            System.out.println(count);
            //Exception in thread "main" java.lang.ArithmeticException: / by zero
        }
    }
    
    

    4.3ArrayIndexOutOfBoundsException 数组下标越界异常

    用非法索引访问数组时抛出的异常。

    package exception;
    @SuppressWarnings({"all"})
    /**
     * @Author Blueshadow
     * @Date 2021/7/30 11:01
     * @Version 1.0
     */
    public class exception {
        public static void main(String[] args) {
            int[] a = {1,2,3,4,5};
            for (int i = 0; i <= a.length; i++) {
                System.out.println(a[i]);
                //Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
            }
        }
    }
    
    

    4.4ClassCastException类型转换异常

    当试图将对象强制转换为不是实例的子类时,抛出该异常。

    package exception;
    @SuppressWarnings({"all"})
    /**
     * @Author Blueshadow
     * @Date 2021/7/30 11:01
     * @Version 1.0
     */
    public class exception {
        public static void main(String[] args) {
            A b = new B();//向下转型
            B b1 = (B)b;//向下转型
    
            C c2 = (C)b;
            //Exception in thread "main" java.lang.ClassCastException: exception.B cannot be cast to exception.C
        }
    }
    
    class A{}
    class B extends A{}
    class C extends A{}
    

    4.5NumberFormatException数字格式不正确异常

    当程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。

    package exception;
    @SuppressWarnings({"all"})
    /**
     * @Author Blueshadow
     * @Date 2021/7/30 11:01
     * @Version 1.0
     */
    public class exception {
        public static void main(String[] args) {
            String str = "Hello world";
            int num = Integer.parseInt(str);
            //Exception in thread "main" java.lang.NumberFormatException: For input string: "Hello world"
        }
    }
    
    

    5.常见编译异常

    编译异常是指在编译代码期间就必须进行处理的异常,否则代码不能通过编译

    常见的编译异常

    SQLException//操作数据库时,查询表可能发生异常
    
    IOException//操作文件时发生的异常
    
    FileNotFoundException//当操作文件,而文件不存在时,发生异常
    
    ClassNotFoundException//加载类,而该类不存在时,发生异常
    
    EOFException//操作文件,到文件末尾,发生异常
    
    IIIegalArguementException//参数异常
    

    6.异常处理机制

    6.1处理方式

    try-catch-finally//在代码中捕获发生的异常,自行处理
    
    throws//将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM
    

    6.2try-catch-finally

    try{
        //代码/可能有异常
    }catch{
        //捕获到异常
        //当异常发生时
        //当系统将异常封装成Exception对象e,传递给catch
        //得到异常对象后自行处理
    }finally{
        //不论是否有异常,一定会执行的代码块
    }
    

    6.3throws异常处理

    如果一个方法中可能生成某种异常,但并不能确定如何处理这种异常,则此方法应显示声明抛出异常,表明该方法不对这些异常进行处理,而由该方法的调用者进行处理。

    在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

    6.4自定义异常

    当程序中出现了错误,但是该错误信息并没有在Throwable子类中描述处理,则这个时候可以自己设计异常类,用于描述该错误信息。

    package exception;
    @SuppressWarnings({"all"})
    /**
     * @Author Blueshadow
     * @Date 2021/7/30 11:01
     * @Version 1.0
     *
     * 案例:在接收Person对象的年龄的时候,要求是在18-120岁之间,否则抛出一个自定义异常,
     * 该自定义异常继承RuntimeException
     */
    public class exception {
        public static void main(String[] args) {
         int age = 800;
         if (!(age>=18 && age<=120)){
             //通过构造器输入异常信息
             throw new AgeException("年龄必须在18-120之间");
         }
         //Exception in thread "main" exception.AgeException: 年龄必须在18-120之间
            System.out.println("你的年龄范围正确");
        }
    }
    //自定义异常
    class AgeException extends RuntimeException{
        public AgeException(String message) {//构造器
            super(message);
        }
    }
    
    //一般情况下自定义异常要继承RuntimeException,即定义成运行时异常,好处是我们可以使用默认的处理机制
    

    6.5throw和throws的区别

    意义 位置 后面跟的东西
    throws 异常处理的一种方式 方法声明处 异常类型
    throw 手动生成异常对象的关键字 方法体中 异常对象
  • 相关阅读:
    程序员指引之路
    RPC 远程过程调用浅谈
    坑爹问题总结
    java 中无符号和有符号int的区别以及byte转int
    python学习Day19 1.产生随机数random、2.序列化【json、 pick、shelve】、3.加 密【hashlib 、hmac】 4.文件的操作【shutil】
    python学习Day18 导包、时间模块【time、calendar datetime】、SYS、OS, OS.path模块、项目开放周期&规范
    python学习Day17 五项【导模块的细节:(跨文件导入模块 &模块的两种执行方式) | 包的概念与使用 | 包中的相对导入语法】
    python学习Day16 模块的概念、模块的导入方式【import 模块名、from 模块 imoprt 功能】、模块的搜索路径、链式导入&循环导入
    python学习Day15 生成器send方法、递归、匿名函数、内置函数
    python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式
  • 原文地址:https://www.cnblogs.com/nanfengashuai/p/15080500.html
Copyright © 2011-2022 走看看