异常

1.异常是什么?
程序中可能出现的问题
2.异常体系的最上层父类是谁?异常分为几类?
父类:Exception。
异常分为两类:编译时异常、运行时异常

3.编译时异常和运行时异常的区别?
编译时异常:没有继承RuntimeExcpetion的异常,直接继承于Excpetion。
编译阶段就会错误提示
运行时异常:RuntimeException本身和子类。
编译阶段没有错误提示,运行时出现的

运行时异常和编译时异常的区别?
●编译时异常:除了RuntimeExcpetion和他的子类,其他都是编译时异常。
                        编译阶段需要进行处理,作用在于提醒程序员。
●运行时异常:RuntimeException本身和所有子类,都是运行时异常。
                        编译阶段不报错,是程序运行时出现的。

异常的作用
作用一:异常是用来查询bug的关键参考信息
作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况
 

一、抛出异常throw

在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接受参数。那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的数据进来。这时需要使用抛出异常的方式来告诉调用者。

在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。那么,抛出一个异常具体如何操作呢?

  1. 创建一个异常对象。封装一些提示信息(信息可以自己编写)。

  2. 需要将这个异常对象告知给调用者。怎么告知呢?怎么将这个异常对象传递到调用者处呢?通过关键字throw就可以完成。throw 异常对象。

    throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

使用格式:

throw new 异常类名(参数);

二、捕获异常

try{
     编写可能会出现异常的代码
}catch(异常类型  e){
     处理异常的代码
     //记录日志/打印异常信息/继续抛出异常
}

灵魂四问
灵魂一问:如果try中没有遇到问题,怎么执行?

答:
会把try里面所有的代码全部执行完毕,不会执行catch里面的代码
灵魂二问:如果try中可能会遇到多个问题,怎么执行?
答:
会写多个catch与之对应,父类异常需要写在下面

灵魂三问:如果try中遇到的问题没有被捕获,怎么执行?

答:

相当于try...catch白写了,当前异常会交给虚拟机处理

灵魂四问:如果try中遇到了问题,那么try下面的其他代码还会执行吗?

答:
不会执行了。try中遇到问题,直接跳转到对应的catch
如果没有对应的catch与之匹配,则交给虚拟机处理

常用方法:

  • public String getMessage():获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。

  • public String toString():获取异常的类型和异常描述信息(不用)。

  • public void printStackTrace():打印异常的跟踪栈信息并输出到控制台。

                                                                细节:仅仅打印信息,不会停止虚拟机

1.虚拟机默认处理异常的方式
把异常信息以红色字体打印在控制台,并结束程序

2.捕获:try...catch

不让程序停止
一般用在调用处,能让代码继续往下运行。

3.抛出:throw throws

告诉调用者出错了
在方法中,出现异常了。
方法就没有继续运行下去的意义了,采取抛出处理。让该方法结束运行并告诉调用者出现了问题。

三、自定义异常

  1. 定义异常类
  2. 写继承关系
  3. 空参构造
  4. 带参构造

意义:就是为了让控制台的报错信息更加的见名之意

声明异常:将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理(稍后讲解该方式),那么必须通过throws进行声明,让调用者去处理。

关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).

格式:

修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{   }	

异常类如何定义:

  1. 自定义一个编译期异常: 自定义类 并继承于java.lang.Exception

  2. 自定义一个运行时期的异常类:自定义类 并继承于java.lang.RuntimeException

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值