zoukankan      html  css  js  c++  java
  • java-异常处理1

    概要图

    异常讲解流程图

    一 java 异常和错误层次图

    1.1 图1

     1.2 图2

    二 异常生的过程

    1 异常可以结束函数.

      同时也让程序结束了.

     三 异常和错误的发生和区别


    Java运行时期发生的问题就是异常。

    Java中运行时发生的除了异常Exception还有错误Error。

    异常:通常发生可以有针对性的处理方式的。如:定义一个数组arr[3],但是你要访问第4个值 .就会发生数组index越界
    错误:通常发生后不会有针对性的处理方式如:定义一个数组arr[1024*1024*1024] 发生内存不足
    Error的发生往往都是系统级别的问题,都是jvm所在系统发生的并反馈给jvm的。
    无法针对处理,只能修正代码。

    3.1 异常

    如:定义一个数组arr[3],但是你要访问第4个值 .就会发生数组index越界

     3.2 错误

    如:定义一个数组arr[1024*1024*1024] 发生内存不足

    四 异常的的简单应用

    异常的应用:

    在编写程序时,必须要考虑程序的问题情况。
    举例:卖水果功能需要传递钱参数,有可能有假币。
    所以定义定义程序需要考虑程序的健壮性。

    加入一些逻辑性的判断。

    4.1 自己抛异常

    class Demo
    {
    /*
    对给定的数组通过给定的角标获取元素。
    */
    int getElement(int[] arr,int index)
    {
    /*1
    jvm出了问题,自己打包对象并抛出。
    但是它所提供的信息不够给力。想要更清晰,需要自己写。
    它的抛出不满足我们的要求。准备自己抛*/
    // 自己写的
    if(arr==null) { throw new NullPointerException("arr指向的数组不存在"); } if(index<0 || index>=arr.length) {
    // 2
    //该条件如果满足,功能已经无法继续运算。这时 就必须结束功能,并将问题告知给调用者。这时就需要通过异常来解决。 //怎么用呢? //1,创建一个异常对象。封装一些提示信息(自定义)。 //2,需要将这个对象告知给调用者。怎么告知呢?怎么将这个对象传递到调用者处呢?通过关键字throw就可以完成。 throw 异常对象; //3,throw用在函数内,抛出异常对象,并可以结束函数。 throw new ArrayIndexOutOfBoundsException("错误的角标,"+index+"索引在数组中不存在"); } int element = arr[index]; return element; } }
    测试
    class ExceptionDemo3 { public static void main(String[] args) { Demo d = new Demo(); int[] arr = {34,12,67}; int num = d.getElement(null,2); //arr指向的数组不存在
    System.out.println("num="+num); System.out.println("over"); } }

     4.2 小练习

     4.2.1 问题

    public class Test {
    
        public static void main(String[] args) {
            Person p = new Person("qq",-5);
            
    
        }
    
    }
    class Person
    {
        private String name;
        private int age;
        Person(String name,int age)
        {
            //加入逻辑判断。
            if(age<0 || age>200)
            {
                
                System.out.println("年龄数值错误");
                return;//终止初始化。
    
            }
            this.name = name;
            this.age = age;
        }
        //定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。
        public String toString()
        {
            return "Person[name="+name+",age="+age+"]";
        }
    }
    结果

    这样做虽然可以编译并运行看到提示消息,但是问题却没有发生,程序还在继续执行。并打印p对象。
    这是不合理的。

    4.2.2改进用异常处理

    package test;
    
    public class Test {
    
        public static void main(String[] args) {
            Person p = new Person("qq", -5);
    
        }
    
    }
    
    class Person {
        private String name;
        private int age;
    
        Person(String name, int age) {
            // 加入逻辑判断。
            if (age < 0 || age > 200) {
    
                throw new IllegalArgumentException(age + ",年龄数值非法"); // 这里发生了变化
            }
            this.name = name;
            this.age = age;
        }
    
        // 定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。
        public String toString() {
            return "Person[name=" + name + ",age=" + age + "]";
        }
    }

     结果

     五 异常的自定义和体系

    5.1 自定义异常思考

    能不能定义一个符合我的程序要求的问题名称。

    异常的信息都可以自定义,那么异常的名字是否可以定义呢?是否可以定义成更符合自己程序的阅读呢?

    之前的几个异常都是java通过类进行的描述。并将问题封装成对象,这是符合面向对象思想。
    其实:异常就是将问题封装成了对象。

    所以我也准备对自己所需要的问题进行类的描述。

    5.2 自己定义并抛出

    package test;
    
    public class Test {
    
        public static void main(String[] args) {
            Person p = new Person("qq", -5);
    
        }
    
    }
    class NoAgeException{
        NoAgeException(){}
        NoAgeException(String message){}
    }
    
    class Person {
        private String name;
        private int age;
    
        Person(String name, int age) {
            // 加入逻辑判断。
            if (age < 0 || age > 200) {
    
                throw new NoAgeException(age + ",年龄数值非法");
            }
            this.name = name;
            this.age = age;
        }
    
        // 定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。
        public String toString() {
            return "Person[name=" + name + ",age=" + age + "]";
        }
    }
    结果
     

     5.3 自定义异常加上父类Throwable

    class NoAgeException extends Throwable{
        NoAgeException(){}
        NoAgeException(String message){}
    }
    结果

     5.4  自定义异常加上父类RunTimeException

     加上super(message)得到结果


    作者:8亩田
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

    本文如对您有帮助,还请多帮 【推荐】 下此文。
    如果喜欢我的文章,请关注我的公众号
    如果有疑问,请下面留言

    学而不思则罔 思而不学则殆
  • 相关阅读:
    从Oracle提供两种cube产品说开
    Sql Server DWBI的几个学习资料
    Unload Oracle data into text file
    初学Java的几个tips
    我常用的Oracle知识点汇总
    benefits by using svn
    如何在windows上使用putty来显示远端linux的桌面
    building commercial website using Microsoft tech stack
    Understand Thread and Lock
    Update google calendar by sunbird
  • 原文地址:https://www.cnblogs.com/liu-wang/p/8228876.html
Copyright © 2011-2022 走看看