Java异常机制

  • 相较于其他语言的优势,Java的异常机制帮助程序员排查错误
  • 可通过JDK API 1.6.0 中文版.chm查询相关信息。

一、常见异常

在这里插入图片描述

1.1 不可处理异常:Error

对应的是Jvm虚拟机的内部的一些错误,如堆内存溢出,栈内存溢出。
jvm系统内部错误,资源耗尽等严重错误,不可处理

1.2 可处理异常:Exception类

编译时异常会直接或间接的继承Exception类,运行时异常会继承RuntimeException

1.2.1 运行时异常
  • 直接或间接继承了RuntimeExcption:
  • 程序在编译时不会发生任何报错,程序员可处理可不处理,但是不处理可能导致程序不能继续向下执行。
    • 空指针异常NullPointException 经常遇见的异常接收过来的引用为

    • 空某参数为空(编译时正常运行时报错)解决方法:对接受过来的引用数据进行非空校验;特别对于web

    • 数组索引越界异常:ArrayIndexOutfBoundException

    • 类文件未找到异常:

造型异常/类型转换异常:ClassCastException

1.2.2 编译时异常

直接或者间接继承了Exception

(发生概率较大的异常会定义为编译时异常)一定会报错,要求编程人员一定要进行处理。

  • 文件找不到异常:FileNotFoundException
  • IOException

二、异常处理机制

找异常提示:异常抛出,最上面一行的异常位置最精确;

2.1 throw方式
  1. throws写在方法名后向调用者抛出;throw是在方法内抛出异常对象;

    做判断,抛出异常:throw new 异常名(“提示”)

throws FileNotFoundException 编译时异常,必须处理;

throws NullpointerException 运行时异常;可以不管;

  1. 异常处理机制的抛出流程: 通过throws把异常向上抛,通常跟值在方法参数定义后,对整个方法代码进行检测最后抛到主函数再从主函数抛到 jvm虚拟机

  2. 异常Exception: 因为编程错误或者偶然的外在因素导致的一般性错误;可处理

2.2 异常处理机制try-catch - finally
try{
具体要被检测的代码部分
    
} catch(异常类  异常类的引用){
针对该异常的处理;(异常一旦出现一定会进入catch语句块)
    
}catch(  ){
    
}finally{
该语句必回执行,用于资源回收(一般是指系统资源浪费)}
  1. catch(异常类 异常类的引用)中可以使用最大的父类Exception异常类来接收;

通过这种方式去处理异常,在捕获异常后,还是会创建该异常对象,但是该异常对象会被catch语句所捕获,具体用异常类来接收该异常对象。

fianlly 做非空校验if(fileinputexception != 0//看是否创建了流文件对象;
      try{异常对象名. close()}.            
       //关闭资源的方法;
   exception.printStackTrace();//打印日志信息  ;                                
//强行结束jvm才能让fianlly不执行。
  1. 抛出的异常必须是异常能够接受的异常(同类或者父类)

    最大父类来接收异常,接收好但是不好处理;
    最好精确一点,针对不同异常进行处理;

三、自定义异常:

  1. Java提供了很多异常,但是这些在项目中并不够用,需要自定义异常;
  2. 自定义异常流程:
  • 直接声明一个类,

  • 如果想定义一个编译时异常让其继承exception

     如果想定义运行时异常让该类去继承runtimeexception,<br />       如果需要构造,通过super把当前类传给父类即可;
    
 public Exception(异常信息String message){
      super(message)}
      通过throw +异常对象;
  1. 案例:

需求:自定义一个异常,年龄不能为负数否则抛出异常,AgeException
创建一个用户类User name、age
给age赋值时,如果年龄要是小于0的话,就抛出该异常。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值