JAVA中的异常(EXception)

异常 EXception

  • 异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序,由Java应用程序抛出和处理的非严重错误
异常分为Checked异常和运行时异常
Checked异常必须捕获或者声明抛出
运行时异常不要求必须捕获或者声明抛出
  • 异常处理:Java编程语言使用异常处理机制为程序提供了错误处理的能力,使程序发生异常后不会影响后续代码的执行
  • try-catch-finally结构中try语句块是必须的,catch、finally语句块均可选,但两者至少出现之一
  • Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws
  • 异常处理原则
异常处理原则:
1:异常处理与性能
2:异常只能用于非正常情况
3:不要将过于庞大的代码块放在try中
4:在catch中指定具体的异常类型
5:需要对捕获的异常做处理
  • 异常体系
异常分为RuntimeException 和SQLException,都继承于Exception,Exception和Error继承于Throwable类,所以Throwable类是所有异常的直接或间接父类,Throwable类继承Object类

异常关键字
  • try:执行可能产生异常的代码块
  • finally:无论是否发生异常,始终都会执行的代码块
1:finally块唯一不执行的情况,除非程序执行到finally之前就结束了,如在finally执行到了System.exit(1);
2:try-catch块中存在return语句,还是会执行finally块再执行return语句
  • throw:生成并抛出异常
  • throws:声明方法可能要抛出的各种异常
1:throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开
2:抛出运行时异常时,可以不在方法上声名抛出异常
  • catch:
1:捕获异常,可以在其中加入发生异常时需要执行的代码块
2:可以写多个catch,可以根据不同的异常类型做不同的处理
3:也可以在一个catch中捕获多个异常
4:捕获的异常种类必须填写正确,不然无法捕获,Exception可以捕获所有异常,所以捕获多个异常时,Exception不能排第一个
5:可以加入用户自定义处理信息,System.err.println("出现错误:被除数和除数必须是整数");
6:调用方法输出异常信息,e.printStackTrace();


语法:

try{

//需要监听的代码块

}

catch(异常类型 异常名称/e){

//对捕获到try监听到的出错的代码块进行处理

throw 异常名称/e; //thorw表示抛出异常

throw new 异常类型(“自定义”);
//System.err.println()
//可以打印红色字体提示

}

finally{

//finally块里的语句不管异常是否出现,都会被执行

}

修饰符 返回值 方法名 () throws 异常类型{  //throws只是用来声明异常,是否抛出由方法调用者决定
自定义异常
  • 当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类
  • 使用自定义异常的步骤
1.定义异常类
2.编写构造方法,继承父类的实现(继承继承Throwable类、继承Excepion 或者RuntimeException)
3.实例化自定义异常对象
4.使用throw抛出

class WrongInputException extends Exception {  // 自定义的类
    WrongInputException(String msg) {
        super(msg);
    }
}
class Input {
    void method() throws WrongInputException {
        throw new WrongInputException("Wrong input"); // 抛出自定义的类
    }
}
class TestInput {
    public static void main(String[] args){
        try {
            new Input().method();
        }
        catch(WrongInputException wie) {
            System.out.println(wie.getMessage());
        }
    } 
}
以上代码运行输出结果为:
Wrong input
异常信息
知识点
  • 调用抛出了异常的方法时,必须要对异常进行处理
处理方式
1:通过try---catch的方式处理异常
2:继续往上抛出异常
注意:main()方法声明的异常由Java虚拟机处理,一般不建议将异常抛给虚拟机,如果虚拟机处理不了的话,整个程序会报错
  • 异常链:在捕获一个异常后抛出另外一个异常,并且希望把异常原始信息保存下来,这被称为异常链(创建了一个新的异常且保留了原始的异常信息)

  • 异常和返回值
 public int test (int chioce) {
        if(chioce >0) return 1;
        if(chioce==0) return 0;
        //小于0的情况不返回int类型的值,抛出异常,不会报返回值错误
        throw new RuntimeException("只能时大于等于0的数字");
        //if(chioce==0) return 0;//永远不抵达的代码,会报错,死循环后面加代码也时一样的
    }
  • printStackTrace()的堆栈跟踪功能显示出程序运行到当前类的执行流程(弹栈,最先发生异常的地方最后显示出来)
  • 异常对象常用的方法
void printStackTrace()  输出异常的堆栈信息
String getMessage() 返回异常信息描述字符串,是printStackTrace()输出信息的一部分

常见异常

InputMismatchException 输入不匹配

NumberFormateException 数字格式化异常

ArrayIndexOutOfBoundsException 数组索引越界

NegativeArraySizeException 数组长度负数

NullPointerException 空指针异常

ArithmeticException 算术错误情形,如以零作除数

ClassCastException 造型异常,将对象的类型还原时与真实类型不匹配

IllegalArgumentException 方法接收到非法参数


错误 Error

  • 仅靠程序本身无法恢复的严重错误
常见错误

StackOverflowError 栈内存溢出错误


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值