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第一百一十三章:什么是回调?回调应用场景详解
java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段