异常

什么是异常

在java程序运行时可能出现的一些错误称为异常。异常是一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指令过程。

例:创建一个Demo类,在主方法中定义int型变量,将0作为除数赋值给该变量。

public class Demo{

public static void main(String[] args) {

int result=3/0;

System.out.println(result);

}

}

运行结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero

at Demo.main(Demo.java:3)

上面的程序运行结果报告发生了算术异常ArithmeticException,系统不再执行,提前结束。当在某一方法中发生异常错误的时候,这个方法创建一个对象,并且把它传递给运行时系统。这个对象就是异常对象。

捕获异常

Java语言可以捕获程序中可能出现的异常,主要由try...catch语句完成。Java异常处理的结构如下:

try {

//程序块

}catch(Exception e) {

//Exception异常的处理

}finally {

//程序块

}

其中,try语句块存放的是可能发生异常的java语句。Catch程序块在try语句块之后,用来处理被捕获的异常。另外,finally语句块是异常处理结构的最后执行部分。不管try块中代码如何退出,都将执行finally块。(finally是可选部分)。

例:异常处理实例

public class Demo{

public static void main(String[] args) {

int result=10;

try {

System.out.println("程序开始");

result=result/0;

System.out.println("result="+result);

}catch(Exception e) {

e.printStackTrace();

}finally {

System.out.println("程序结束");

}

}

}

运行结果:

程序开始

程序结束

java.lang.ArithmeticException: / by zero

从运行结果可以看出,程序仍然输出最后的“程序结束”信息,没有因为异常而终止。Catch关键字后面括号中的参数类型Exception就是try代码块传递给catch代码块的异常类型。Catch代码块中的语句“e.printStackTrace();”用于输出异常的堆栈跟踪信息。在以下3种特殊情况下,finally语句不会被执行。

1. finally语句块中发生了异常。

2. 在前面代码中用了“System.exit()”语句退出程序。

3. 程序所在的线程死亡。

声明可能会出现的异常

若某个方法发生异常,但不想在当前方法中处理这个异常,那么可以使用throws关键字将异常向上抛出,由调用者处理异常。

public static int fun(int x,int y) throws Exception{

int result=0;

result=x/y;

return result;

}

如果调用fun()方法可能会出现异常,那么该异常由主方法来处理。

public static void main(String[] args) {

int x=10;

int y=0;

try {

fun(x,y);

}catch(Exception e) {

e.printStackTrace();

}

}

抛出异常

Throw语句用于抛出异常,值得注意的是,由throw语句抛出的对象必须是java.lang.Throwable类或者其子类的实例。

public class Demo{

static int fun(int x,int y)throws Exception{

if(y<0) {

throw new Exception("除数不能为0");

}

return x/y;

}

public static void main(String[] args) {

int result=0;

try {

result=fun(10,0);

} catch (Exception e) {

e.printStackTrace();

System.out.println("除数不能为0");

}

}

}

运行结果:

java.lang.ArithmeticException: / by zero

at Demo.fun(Demo.java:6)

at Demo.main(Demo.java:11)

除数不能为0

运行时异常

RuntimeException异常中程序运行过程中产生的异常。所有的异常类都是Throwable类的子类。Throwable类派生了两个子类,分别是ExceptionError类。Error类及其子类用来描述Java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重。Exception类称为非致命性类,可以通过捕捉处理使程序继续执行。

RuntimeException异常的种类

种类

说明

NullPointerException

空指针异常类

ArrayIndexOutOfBoundsException

数组下标越界异常

ArithmeticException

算术异常类

ArrayStoreException

数组中包含不兼容的值

IllegalArgumentException

非法参数异常

SecurityException

安全性异常

NegativeArraySizeException

数组长度为负

异常的使用原则

异常处理可遵循以下几条原则:

1. 在当前方法声明中使用try...catch语句捕获异常。

2. 一个方法被重写时,重写它的方法必须抛出相同的异常或异常的子类。

3. 如果父类方法抛出多个异常,那么子类重写该方法必须抛出那么异常的一个子集,不能抛出新异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云淡风轻58

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值