Java异常处理机制

java异常处理机制

在生活中总有意料之外的悲剧,在你痛苦万分的时候总会有些人对你落井下石。这些意料之外的情况,就是异常。

程序在运行时也会出现各种各样的异常,Java在最开始的时候就已经设计好了各种各样可能出现的异常,我们只需要来使用这些已经编写好的异常处理机制,来规避和处理程序中可能遇到的异常;

简单的把异常分为三类:

检查性异常:最具有代表性的异常是用户错误或问题引起的异常,这是开发人员无法预见的,例如 用户输入的数据类型不匹配 一个异常就发生了 这些异常在编译时不能被简单的忽略。需要提前预判并做好相应的处理;

运行时异常:运行异常是可能被程序员避免的异常,与检查型异常相反,运行时异常在编译时会被忽略,在程序运行时才会暴露出来

错误:ERROR:错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译时也检查不到。

在这里插入图片描述

异常的捕捉以及抛出

关键字try catch finally throw throws

try: 用来检查存放可能出现异常的代码块;

catch: 用来捕捉异常 并且做出相应的处理 可以叠加;

finally:处理善后工作,无论程序是否有异常 都会执行finally代码块中的内容;一般用来关闭io流

throw:用来主动声明异常,一般在方法条件中使用

throws:用来抛出方法中的异常 给调用者处理 调用者在调用被声明异常的方法时 必须要进行 捕获 和处理

 //创建一个方法  并把异常抛出给方法调用者捕获和处理
    public void A(int a,int b) throws ArithmeticException{
        if (b==0){  //当b为0时主动抛出异常
            throw new ArithmeticException();
        }
        System.out.println(a/b);       //输出a除b b不能为0
    }

    public static void main(String[] args) {
       new test1().A(1,0);			
    }
输出结果:
    Exception in thread "main" java.lang.ArithmeticException    //算法报错

再写一个相同的方法把算法去掉试试:

 //创建一个方法  并把异常抛出给方法调用者捕获和处理
    public void A(int a,int b) throws ArithmeticException{
        if (b==0){  //当b为0时主动抛出异常
            throw new ArithmeticException();
        }
      //  System.out.println(a/b);     将除法运算注释掉
    }

    public static void main(String[] args) {
       new test1().A(1,0);			
    }
输出结果:
    Exception in thread "main" java.lang.ArithmeticException    //依然是算法报错
    
 因为之前在b==0的条件判断语句中声明了算法异常 所以只要b==0 无论是否发生异常 都会抛出该异常;

在方法调用时用 try捕获处理异常

//在方法调用时 依旧让 b=0 程序报错
public static void main(String[] args) {
       try {
            new test1().A(1,0);            			//依旧传入b=0 让程序错误
        } catch (ArithmeticException e) {      
            System.out.println("我是catch");			//当有异常被捕捉时执行
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            System.out.println("我是finally");    //无论是否有异常都会执行
        }
    }	
 }
运行结果:
   			 我是catch             //当有异常时  finally被执行了
			我是finally
//在方法调用时 输入一个合法数字 让b=1
public static void main(String[] args) {
       try {
            new test1().A(1,1);            			//b=1 
        } catch (ArithmeticException e) {      
            System.out.println("我是catch");			//当有异常被捕捉时执行
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            System.out.println("我是finally");    //无论是否有异常都会执行
        }
    }	
 }
运行结果:           // 程序未出现异常 catch未执行 finally执行了
			我是finally

自定义异常

自定义一个类让它继承Exception类 在里面可以自定义一些想要捕获的异常

public class test1 extends Exception{
    private int b; 

   public test1(int a){
       this.b=a;
   }
    @Override
    public String toString() {       //当异常被捕捉时 会输出下面的语句
        return "自定义的错误信息{" +
                "b不能为" + b +
                '}';
    }
}
 public static void main(String[] args) throws test1{
       int a=11;
       if (a>10){
           throw new test1(a);
       }
    }

输出结果为:			
    	Exception in thread "main" 自定义的错误信息{b不能为11}		//自定义的错误信息被输出
			at com.aaa.ViC_GymSystem.test1.main(test1.java:21)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值