异常

作者: 风吹稻子 | 来源:发表于2017-04-17 07:25 被阅读90次

1.异常是什么?

异常就是在本该顺理成章的地方发生了出乎意料的事情,这个“事情”就是异常。处理和解决这个事情,就是处理异常。

举例:

光头强像往常一样去砍树,突然发现刀没了。但是刀一直放在那个墙角啊,怎么会没了呢(异常)?最后只能去集市上买一把了,结果发现灰太狼在卖刀,才明白是灰太狼偷了他的刀(明白异常发生的原因)。还把灰太狼打了一顿,甚是高兴。(解决了bug,当然异常高兴)

2.异常的父类?

Object-->Throwable-->Exception -->运行时异常(RuntimeException)
                               -->检查类异常(CheckedException)
                  -->Error及其子类只能用来处理系统内部程序的异常和运行环境的异常,一般与硬件有关

解释:
异常可以分为Exception和Error两大类,它们的父类都是Throwable,而Exception又可以分为RuntimeException和CheckedException两大类

3.常出现的异常

  1. ArithmeticException
  2. ArrayIndexOutOfBoundException
  3. NullPointerException
  4. ClassNotFindExceotion
  5. IIIegalArgumentException
  6. ClassCastException
  7. NumberFormatException

代码:

package 异常;
public class ExceptionTest {    
public static void main(String[] args) {        
    int num = 5 / 0;
    System.out.println(num);        
}

}

测试结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero
at 异常.ExceptionTest.main(ExceptionTest.java:12)

注意:当出现异常之后,后面代码不可被执行

4.处理异常的方法

1.
     try {

     } catch() {
        //先子类,后父类
        //只执行第一个成功匹配的异常
     }
2.
    try{

    }catch(){

    }fianlly{
        //不管有没有异常都会被执行
        System.exit(-1)
    }
3. 只有System.exit(-1);finally才不会执行,其他情况都会执行,即使在finally之前定义了return

测试代码:

 package 异常;

public class Test {     
    public static void main(String[] args) {            
            int[] a = {};
            System.out.println(a[0]);           
    }
}

测试结果:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at 异常.Test.main(Test.java:8)

测试2(使用try catch finally)

 package 异常;

public class Test {
    
    public static void main(String[] args) {
            try {
                int[] a = {};
                System.out.println(a[0]);
            } catch (Exception e) {
                System.out.println("数组为空");
            } finally {
                //除非System.in(-1),finally才不会被HI行
                System.out.println("始终会被执行");
                    
            }   
    }
}

测试结果:

数组为空
始终会被执行

5.捕获异常的过程

当代码产生异常后,系统会自动创建一个异常对象,如果系统创建的异常对象和catch(异常对象)中的异常对象一致,就会执行catch中的内容

代码测试:
package 异常;

public class ExceptionTest {
    
    public static void main(String[] args) {
        try {
            int num = 5 / 0;
            System.out.println(num);
        } catch (NullPointerException e) {
            System.out.println("出错了");
        }                       
    }       
    
}

测试结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero
at 异常.ExceptionTest.main(ExceptionTest.java:7)

总结:从上可以看出,如果捕获的异常不匹配,结果还是会报异常
注意:在try里面,一旦异常发生,后面的部分代码就不再执行。

6.为当前项目创建自己独有的异常类型

创建一个自己的异常类,继承自IllegalArgumentException异常类
package 异常;

public class AgeOverException extends IllegalArgumentException{

//构造方法
public AgeOverException(){}

public AgeOverException(String msg){
    super(msg);
}

}

测试类

package 异常;

public class Student {

    private int age;

    public int getAge() {
        return age;
    }
    
    //声明异常
    public void setAge(int age) throws Exception{
        if (age > 0 && age < 100) {
            this.age = age;
        } else {
            //抛出异常
            throw new AgeOverException("用户输入的年龄不对");
        }
    }

    public static void main(String[] args) throws Exception {
        Student s = new Student();
        s.setAge(120);
    }
}

测试结果:

Exception in thread "main" 异常.AgeOverException: 用户输入的年龄不对
at 异常.Student.setAge(Student.java:17)
at 异常.Student.main(Student.java:23)

7.其他问题

1.什么是检查异常

检查异常:如果当前的方法在运行时可能会出现异常,那么我们就需要声明异常,以便于在调用的时候捕获异常。防止程序中断。

2.什么是运行时异常

运行时异常:运行时产生的错误

3.声明异常和抛出异常的区别?

  1. 声明异常: throws,声明异常后需要在调用方法时,捕获异常
  2. 抛出异常: throw

4.为什么为方法添加声明异常

如果当前方法出错,将会影响后续程序的执行,如果不想影响,需要提前给方法声明异常,使用时提示捕获异常。

5.抛出异常的意义

可以终止程序的允许,如果当前方法无法完成,后续操作也无须执行。但是抛出异常后,后续程序可以运行

6.处理异常的优点:

增加程序的健壮性

相关文章

  • 异常和模块

    异常 目标 了解异常 捕获异常 异常的else 异常finally 异常的传递 自定义异常 一. 了解异常 当检测...

  • python多线程

    异常基础知识 -异常简介: 运行时错误 -异常类: 异常数据 异常名称,异常数据,异常类型 -自定义异常 clas...

  • dart 异常

    dart中的异常 异常处理 抛出异常 异常捕获

  • Java基础之异常

    Java基础之异常 目录 异常简单介绍 ThrowableErrorException 异常分类 如何处理异常异常...

  • python核心编程-错误与异常

    本章主题:什么是异常Python中的异常探测和处理异常上下文管理引发异常断言标准异常创建异常相关模块 什么是异常 ...

  • motan(RPC)系统梳理知识点

    异常分类: 业务异常(bizException) 服务异常(serviceException) 框架异常(fram...

  • 异常

    Java异常体系 异常的分类 Java的异常分为两大类:Checked异常和Runtime异常(运行时异常)。所有...

  • 从零构架个人博客网站(二)-全局异常处理

    中间件的异常 全局异常中间件全局异常监听定义异常的返回结果定义常见的异常状态开发环境 异常查看 对于异常,我们可以...

  • Node.js异常处理

    Node.js异常分类: 变量异常 函数异常 调用异常 变量异常 未定义变量 未包含对象 变量类型错误 函数异常 ...

  • python 异常

    异常 目标 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释...

网友评论

本文标题:异常

本文链接:https://www.haomeiwen.com/subject/ebizattx.html