java知识点三:异常

Posted python-road

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java知识点三:异常相关的知识,希望对你有一定的参考价值。

异常

一.概念

异常时程序中的一些错误,但并不是所以的错误都是异常,并且错误有时候是可以避免的。

异常体:

Throwable:所以异常类的超类

Error:表示不希望被程序捕获,或者是程序无法处理的错误

Exception:表示用户程序可能捕捉的异常情况或者说可以处理的异常

其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常。

Java异常又可以分为不受检查异常(Unchecked Exception)和检查异常(Checked Exception)。

         检查异常属于编译时异常,也就是编译时就会出现的异常,必须进行处理(try catch/throws)

         而不受检查的异常属于运行时异常,在编译期间不可查,在程序控制范围之外。

更多异常:http://www.importnew.com/16725.html

二.异常处理机制

了解异常处理机制之前,先要了解异常情形(exception condition),它是指阻止当前方法或作用域继续执行的问题。所以,异常发生的时候,作用域后续的代码无法继续执行!抛出异常后,会有几件事随之发生。首先,是像创建普通的java对象一样将使用new在堆上创建一个异常对象;然后,当前的执行路径(已经无法继续下去了)被终止,并且从当前环境中弹出对异常对象的引用。此时,异常处理机制接管程序

异常处理机制主要分为两大类——捕获异常,抛出异常

1.捕获异常:

捕获语句:

try {
            //可能发生异常的代码
        } catch (Exception e1) {
            // 捕获异常后的处理代码
        } catch (Exception e2) {
            // 捕获异常后的处理代码
        } finally {
            // 总是会执行的代码(可选)
        }

注意点:1.try语句块中的是肯能和出现异常的语句;try中声明的变量生命走起仅在try语句                   块中有效,通常,将声明写在try之前以提高生命周期!

               2.catch语句块是捕获异常后的异常处理:发生异常后catch语句依次依次检查                   (catch语句捕获的异常应该是逐级捕获,先捕获小的异常,后捕获大的异常)

                   3.finnally语句无论是否发生异常都会执行,如果之前代码有return语句,那么                     会在return语句之前执行,通常,可以用来做一些资源关闭的操作

try catch模型,一般用于非运行时的异常(checked Exception),运行时异常一般不需要手动进行处理。

2.抛出异常

在方法签名上声明抛出的异常(自动抛出一个异常对象):

对于异常情形,已经无法继续下去了,因为在当前环境下无法获得必要的信息来解决问题,你所能做的就是从当前环境中跳出,并把问题提交给上一级环境,这就是抛出异常时所发生的事情。

方法只是抛出异常,谁调用谁负责处理(要么继续外抛,要么try_catch进行捕获处理)

  技术图片

   //其中file()方法选择了将异常抛出,那么在发生异常的时候就会抛出一个异常的对象!调用它的main方法就必须处理:要么继续在方法声明上抛出,要么进行try_catch

  //如果方法中抛出了具有父子关系的异常,那么如果异常是统一处理的,可以只抛出大的异常,捕获大的异常,统一处理,想不同的异常区别处理,可以遵循catch块的原则,分别处理!

手动抛出一个异常:

 

public static void main(String[] args) {
        inputNumber(0);
    }

    // 抛出异常
    public static void inputNumber(int num){
        if (num == 1) {
            System.out.println("输入了:1");
        } else {
            // 手动抛出异常
            throw new RuntimeException("传入的不是1!(只能传入1!)");
        }
    }

 

技术图片

抛出异常就是这两种方式:1.在方法声明出抛出一个异常的类型——throws

                                            2.在代码处手动抛出一个异常对象——throw

throw出的异常一般是运行时异常(RuntimeException及其子类等)                                         

三.自定义异常

例子:

public class MyException extends RuntimeException{
    static final long serialVersionUID = -7034868990745766939L;

    public MyException() {
    }

    public MyException(String message) {
        super(message);
    }
}
public class MyException extends RuntimeException{
    static final long serialVersionUID = -7034868990745766939L;

    public MyException() {
    }

    public MyException(String message) {
        super(message);
    }
}

技术图片

参考地址:http://www.cnblogs.com/Qian123/p/5715402.html

 

 

     

以上是关于java知识点三:异常的主要内容,如果未能解决你的问题,请参考以下文章

java 反射代码片段

片段中的 EditText 上的空指针异常 [重复]

Java异常处理机制

java总结

Java异常处理的基础知识

带你整理面试过程中关于 Java 中的 异常分类及处理的相关知识