Java的异常处理

目录

1.异常的基本概念

1.什么是异常

2.java中有哪些异常

3.常见的异常有哪些

2.异常的处理

1.异常的处理:抓抛模型

2.异常处理方式一:try-catch-finally

3.finally的使用

4.异常处理方式二:throws+异常类型

5.两种方式的选择

6.异常对象的产生

7.自定义异常类

8.throw和throws区别


1.异常的基本概念

1.什么是异常

        异常:程序执行中发生的不正常情况

2.java中有哪些异常

        error:jvm无法解决的严重问题,一般不编写针对性代码进行处理

        exception:编程错误或外在因素导致的一般性问题,可以使用针对性代码处理

        exception异常分为:编译时异常(checked)和运行时异常(unchecked)

3.常见的异常有哪些

1.空指针异常NullPointerException

2.索引越界异常ArrayIndexOutOfBoundsException

3.类型转换异常ClassCastException

4.数值转换异常NumberFormatException

2.异常的处理

1.异常的处理:抓抛模型

过程一:抛出异常

程序正常执行过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此对象抛出。

过程二:处理异常

                1.try-catch- finally

                2.throws

2.异常处理方式一:try-catch-finally

        1.finally是可选的,不一定要写。

        2.使用try将可能异常代码包装起来,一旦出现异常,就会生成一个对应异常类的对象,根据此对象类型,去catch中匹配

        3.匹配到一个catch时就进入catch中进行异常处理处理完成后跳出当前的try- catch结构(无finally)。继续执行后面的代码。

        4.try-catch中和if- else一样,范围小的写在上面。子类声明在父类上面,否则报错。

        5.try结构中定义的变量在try外界无法调用

        6.使用try- catch- finally处理异常,在编译时不报错,在运行时仍可能报错

代码示例:

public class Demo2 {
    public static void main(String[] args) {
        int[][] arr = new int[3][];
        AA a = new AA();
        try {
            System.out.println(arr[2][2]);
            a.getArr();
        }catch(NullPointerException e){
            e.printStackTrace();
            System.out.println("异常已处理");
        }finally{
            System.out.println("我一定会出现");
        }
    }
}
class AA{
    public int getArr(){
        return 1;
    }
}

3.finally的使用

1.finally中声明的一定会被执行,即使catch中再次出现异常,或者try中有return或catch中有return。

2.finally执行先于try和catch中的返回语句,但若try中可以输出就先输出try

3.数据库连接、输入输出流、网络编程Socket等资源,jvm不能自动回收,需要手动进行资源的释放。此时的资源释放需要声明在finally中

4.try- catch结构可以嵌套

5.开发中,由于运行时异常比较常见,通常不针对运行时异常编写try- catch- finally。针对编译时异常,一定要考虑异常的处理。

4.异常处理方式二:throws+异常类型

1.throws +异常写在方法的声明处,指明方法执行时可能出现的异常;一但方法体执行时出现异常,仍在异常代码处生成一个异常类的对象。此对象满足throws后异常类型时,就被抛出异常代码后续代码不再执行

2.try- catch真正处理了异常

  throws只是将异常抛给了方法的调用者,并没有解决异常,解决异常还是需要使用try- catch- finally

public class Demo3 {
    public static void main(String[] args) throws FileAlreadyExistsException {
        D d = new D();
        d.eat();
        d.sleep();
    }
}
class D{
    public void eat() throws NullPointerException{
        System.out.println("1");
    }
    public void sleep() throws FileAlreadyExistsException{
        System.out.println("2");
    }
}

5.两种方式的选择

1.若父类被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws;若子类重写的方法中有异常,必须使用try- catch- finally方式处理。

2.执行的方法a中先后调用了另外的几个方法,这几个方法递进关系依次执行,则建议几个方法使用throws方式处理。执行的方法a可以使用try- catch- finally进行处理。

6.异常对象的产生

1.系统自动生成的异常对象

2.手动的生成一个异常对象,并抛出(throw);

    public Employee getEmployee (int id) throws TeamException{
        for (int i = 0; i < employees.length; i++) {
            if (employees[i].getId() == id){
                return employees[i];
            }
        }
        throw new TeamException("您所查找的客户不存在!");
    }

7.自定义异常类

1.继承现有的异常类:RuntimeException、Exception(编译时就要处理)

2.提供long型全局常量serialVersionUID序列号

3.提供重载的构造器

public class TeamException extends Exception {
    static final long serialVersionUID = -3387516993122578948L;
    public TeamException(){

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

8.throw和throws区别

        throw表示抛出一个异常类的对象,属于生成异常对象的过程,声明在方法体内

        throws属于异常处理的一种方式声明在方法的声明处

你可能感兴趣的:(JavaEE知识,java,jvm,开发语言)