Java——基础知识(十三)——异常

Posted UDK_KL.

tags:

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

如有不妥之处欢迎指正



异常

  • Java将程序运行过程中的非正常情况封装成异常类,并通过异常处理机制对程序运行时发生的各种问题进行处理

两种常见异常类

  • Error(错误类): 此类表示java运行时产生的系统内部错误或资源耗尽的错误,一般此类错误仅靠修改程序本身是不能被修复的,如系统崩溃
  • Exception(异常类): 此类表示程序本身可以处理的错误,该类下除了RuntimeExpecption子类表示运行时错误外,其他子类都表示编译错误

异常的类型

编译异常

  • 在程序编写过程中,Java编译器就会对程序进行检查,如果出现了比较明显的异常就必须对异常进行处理
    处理方式: 使用try…catch对异常进行捕获,使用throws关键字声明抛出异常,让调用者对其进行处理

运行时异常:

  • 在程序运行时由Java虚拟机自动捕获处理的,这种错误即使没有使用try…catch语句捕获或throws关键字声明抛出,程序也能编译通过,但是在运行时可能报错

常见的运行时异常

异常类名称异常类说明
ArithmeticException算数异常
IndexOutOfBoundException角标越界异常
ClassCastException类型转换异常
NullPointerException空指针异常
NumberFormatException数字格式化异常

try…catch语句和finally语句

try…catch

  • 当程序发生异常时会立即终止,这会影响开发效率,因此Java提供了一种对异常进行处理的方式——异常捕获
  • 异常被try…catch捕获并处理后程序仍能正常向下执行!

try…catch语句的声明

try
{
	//可能发生异常的语句
}

catch(Expection类或其子类 e)
{
	//对异常进行处理的语句
}

try…catch语句的使用

public class Main
{
    public static void main(String [] args)
    {
        int x,y,z;

        x=1;
        y=0;

        try
        {
            z=x/y;
            System.out.println("在发生异常的代码后方的代码是不执行的");
        }
        catch(Exception e)
        {
            System.out.println("除数不能为零");
        }

        System.out.println("异常捕获后仍能继续运行");
    }
}

输出

除数不能为零
异常被捕获后仍能继续运行

注意:

  • 通常用于确定的有可能出现异常的代码
  • 在try中的代码出现异常时,程序会转而执行catch中的代码
  • 在执行完catch中的代码之后程序仍会继续向下运行
  • 在try中出现异常的代码的后方的代码是不会被执行的

finally

  • 有时会希望某些语句不论程序是否发生异常都要执行,为此仅需在catch代码块的下方添加finally代码块即可

finally语句的声明

try
{
	//可能发生异常的语句
}

catch(Expection类或其子类 e)
{
	//对异常进行处理的语句
}
finally
{
	//无论如何都要执行的语句
}

finally语句的使用

public class Main
{
    public static void main(String [] args)
    {
        int x,y,z;

        x=1;
        y=0;

        try
        {
            z=x/y;
            System.out.println("在发生异常的代码后方的代码是不执行的");
        }
        catch(Exception e)
        {
            System.out.println("除数不能为零");
        }
        finally
        {
            System.out.println("无论如何都要执行的语句");
        }
        System.out.println("异常捕获后仍能继续运行");
    }
}

输出

除数不能为零
无论如何都要执行的语句
异常捕获后仍能继续运行

throws关键字

注意:

  • 用在方法声明中,用于指明方法可能出现的多种异常
  • 通常用于不确定某处代码是否出现异常或出现的异常并不急于处理
  • 用于整个方法而不是某段代码块
  • 可以一次性抛出多种异常
  • 表现为在编译时报错

语法格式
用在方法声明的后面,throws的后面需要声明方法中发生的异常的类型

[修饰符]返回值类型 方法名([参数类型 参数名1 ...])throws 异常类1,异常类2...
{
	方法的内容
}
public class Main
{
    public static int f(int a,int b) throws Exception
    {
        return a/b;
    }

    public static void main(String [] args)
    {
        System.out.printf("%d\\n",f(1,0));
    }
}

编译结果为
在这里插入图片描述
提示第十行出错

如果去掉throws关键字则可以正常编译,但是运行时会出错

throw关键字

  • throws关键字用于方法,throw关键字用于方法体内的某个异常对象
  • 需要与throws和try…catch搭配使用
  • 提高了程序的可读性
public class Main
{
    public static int f(int a,int b) throws Exception
    {
        if(b==0)
            throw new Exception("除数不能为零");

        int z=a/b;

        return a/b;
    }

    public static void main(String [] args)
    {
        try
        {
            f(1,0);
        }
        catch(Exception e)
        {
            System.out.println("错误信息为:"+e.getMessage());
        }
    }
}

输出

错误信息为:除数不能为零

以上是关于Java——基础知识(十三)——异常的主要内容,如果未能解决你的问题,请参考以下文章

“全栈2019”Java第一百一十三章:什么是回调?回调应用场景详解

《On Java 8》中文版 第十三章 函数式编程

Python基础学习第十三节 异常操作总结

java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段

Python小白到老司机,快跟我上车!基础篇(十三)

零基础学Java—发红包案例(二十三)