Java异常处理

本文介绍了Java中的异常处理,包括异常的描述(如算术异常)、异常的抛出和捕捉(try-catch-finally结构)、常见异常类(如ArithmeticException和NullPointerException)以及如何自定义异常和在方法中抛出异常。通过示例代码展示了异常处理的过程和机制。
摘要由CSDN通过智能技术生成

1.1异常的描述

在程序中,异常可能由程序员没有预料到的各种情况产生,也可能由超出了程序员可控范围的环境因素产生,如用户的坏数据、试图打开一个根本不存在的文件等。在java中,这种在程序运行时可能出现的一些错误成为异常

如下列代码1.1:

public class test {
    public static  void main(String[] args)
    {
        int result = 3 / 0 ;
        System.out.println(result);
    }
}

 运行结果为

 程序运行的结果报告发生了算术异常 ,系统不在向下执行,提前结束。这种情况就是所说的异常。

1.2 异常的抛出与捕捉

1.2.1 抛出异常

异常抛出后,如果不做处理,程序将会终止,如代码1.1 。

又例如代码1.2,将一个字符串转为整形,如果该字符串不是数字,parseInt()方法将抛出异常,程序将在出现异常的位置终止,不再执行接下来的语句。

public class test {
    public static  void main(String[] args)
    {
        String str = "lili" ;
        System.out.println(str + "age:");
        int age = Integer.parseInt("20l");
        System.out.println(age);
    }
}

 结果如下:

由上述结果可以看出,“liliage:” 成功输出,但age没有输出,所以程序在字符串转换前没有异常,在其之后程序开始终止。

1.2.3 捕捉异常

java语言的异常捕获结构由 try 、catch 、finally 3部分组成。其中try语句存放的是可能发生异常的java语句;catch语句放在try语句块之后,用来激发异常;finally语句是异常处理结构的最后执行部分,无论try 的代码如何退出,finally 语句都将被执行

语法如下:

try{

        //代码块

}

catch (Exception1 e){

        //处理语句

catch (Exception2 e){

        //处理语句

.....

finally{

        //处理语句

}

1.try-catch语句

这时我们将代码1.2改写为try-catch语句编写为如下代码(代码1.3) :

public class test {
    public static  void main(String[] args)
    {
        try {
            String str = "lili";
            System.out.println(str + "age:");
            int age = Integer.parseInt("20l");
            System.out.println(age);
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println("Program over");
    }
}

结果如下: 

以上可以看出,程序仍然输出最后的提示信息,并没有因为异常而终止程序。当try语句出现异常时,将自动跳转到catch语句进行异常处理,而try出现异常后面的语句并没有 被继续执行。

2.finally语句

完整的异常处理过程一定包含finally语句,无论程序是否有异常发生,并且无论之前的try-catch语句块是否顺利正常进行,都会执行finally语句。以下4种特殊情况下,finally不会被执行:

  • 在finally语句出现异常
  • 前面的代码使用了System.exit()程序
  • 程序所在线程死亡
  • 关闭CPU

1.3 Java常见的异常类

异常类说明
ClassCastException类型转换异常
ArithmeticException算术异常
ArrayIndexOutOfBoundException数组下标越界异常
NullPointerException

空指针异常

NumberFormatException字符串转数字抛出的异常
StringIndexOutOfBoundException字符串索引超出范围抛出的异常
FileNotFoundException文件未找到异常

1.4 自定义异常

用户可继承Exception类来自定义异常。在程序中使用自定义异常,大体可分为以下步骤:

1) 创建自定义类

2)在方法中通过抛出throw关键字抛出异常对象

3) 如果在当前抛出异常的方法中处理异常,可使用try- catch 语句捕获并处理

4) 在出现异常的方法的调用者中捕获并处理异常。

语法如下:

public class MyException extends Exception{
    public MyException(String[] ErrorMessage){
        super(Exception);
    }
}

public class Tran{
    static int avg() throws MyExcepton{   //定义方法,抛出异常
        //判断错误信息的代码块
    }
    public static void main(String[] args){
        try{
               //调用avg()方法
        }catch{
            //处理
        }
    }
}

1.5 在方法中抛出异常

如果某个方法可能发生异常,并且不想在当前方法处理,则可以使用throws、throw在方法中抛出异常。

1.5.1 使用throws抛出异常

throws关键字被应用于声明方法时,用来指定方法可能抛出的异常,可抛出多个异常。如1.4中自定义异常类语法中使用throws将异常抛出。

1.5.2 使用throw抛出异常

throw关键字通常用于方法体中,并且抛出一个异常。

语法如下:

public class MyException extends Exception{
    public MyException(String[] ErrorMessage){
        //自定义方法
    }
}

public class Tran{
    static int avg() throws MyExcepton{   //定义方法,抛出异常
        throw new MyException//判断错误信息,同时抛出异常信息
    }
    public static void main(String[] args){
        try{
               //调用avg()方法
        }catch{
            //处理
        }
        ....
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值