Java中的常见异常及其处理

一、异常:

        异常是指在程序运行过程中所发生的不正常事件,如:所需文件找不到,网络连接不通或连续中分段,算数运算出错,数下标越界等等。

二、常见的异常类型

        1) 算数异常:ArithmeticException

        2)输入不匹配异常:InputMismatchException

        3)数组下标越界异常:ArrayIndexOutOfBoundsException

        4)控制指针异常:NullPointerExceotion

        5)非法参数异常:IllegalArgumentsException

        6下标越界异常:IndexOutOfBoundsException

        7)文件按未找到:FileNotFoundException

        8)输入输出异常:IOExpectiom

        9)数据库异常:SQLException

        10)数据格式化异常:NumberFormException

比如:

1、算数异常

public class exception {
    public static void main(String[] args) {
    int a=5;
    int b=0;
        System.out.println(a/b);//输出5/0,0不能为除数;

    }
}

结果

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at exception.main(exception.java:10)
//算数异常报(零不能作为除数)
Process finished with exit code 1

2、输入不匹配异常

public class exception {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);//创建键盘录入对象
        System.out.print("请输入一个正整数:");//键盘录入提示
        int a=input.nextInt();//录入一个int类型的变量
         System.out.println(a);
    }
}

运行结果

请输入一个正整数:b  //输入字母b,与int不匹配
Exception in thread "main" java.util.InputMismatchException //提示:输入类型不匹配
	at java.util.Scanner.throwFor(Scanner.java:864)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at exception.main(exception.java:12)

3、数组下标越界

public class exception {
    public static void main(String[] args) {
        int[] a = {1, 3, 4, 6, 7};//定义一个下标从0~4的数组
        System.out.println(a[5]);//输出下标为5的数组,很明显会造成数组越界
    }
}

运行结果

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
	at exception.main(exception.java:11) //提示数组越界

其他类似............

三、异常处理

       1、 关键字: try-catch

        语法:try{

                      //  存在异常的代码

                      }catch(异常类型  变量名){

                                  //处理代码块或提示

                      }

例如1:

public class exception {
    public static void main(String[] args) {
       try {
           Scanner input = new Scanner(System.in);//创建键盘录入对象
           System.out.print("请输入一个正整数:");//键盘录入提示
           int a = input.nextInt();//录入一个int类型的变量
            System.out.println(a);
    }catch(InputMismatchException i){
           System.out.println("请输入正确的数字");
       }
    }
}

运行结果1

请输入一个正整数:w
请输入正确的数字

运行结果2

请输入一个正整数:3
3

当然也可以用if-else完成,但是有以下缺点:

        1、代码臃肿,加入大量的异常情况判断和处理代码

        2、很难杜绝所有异常

        3、浪费技能精力在堵漏洞上

        4.处理异常代码和业务代码在一起,比较混乱。

2、try-catch处理异常的机制:

        在try-catch语块中,会先执行try语句块,在执行try语句块过程会出现以下三种情况:

                1、语句正常执行没有异常,那么catch中的语句块就不会执行。

                2、try语句出现异常,并且这个异常和catch语句块中声明的异常类型匹配,那我try语句块内剩下的语句也不会执行,但会执行catch语句块内的语句。和后面的语句。

                3、try语句块出现异常,但是这个异常和catch语句块内声明的异常类型不匹配,那程序会立刻退出;

        catch语块中可以加入自定义方法,也可以调用异常对象的输出方法,常用的方法有:

                1、viod printStackTrace();输出异常堆栈信息;(和不处理异常的相同)

                2、String getMessage();输出异常的原因.

                                                        需要输出:System.out.print(String getMessage()  )

3、try-catch-finally     

        不论是否发生异常都会执行

        只有一种情况不会执行那就是在catch中出现System.exit(1)

4、存在return的try-catch-finally

异常会先产生异常对象——>进入异常类型——>执行catch块——>执行finally——>最后执行return

例子

public class Demo6 {
    public static void main(String[] args) {
        try{
        System.out.println(5/0);
        }catch(ArithmeticException e){
            System.out.println("catch 块");
            return;
        }finally{
            System.out.println("finally块");
        }

可以debug走一下

 

 

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值