Java中异常的介绍

Java中异常的介绍

异常
1.异常:就是程序在运行时出现的不正常情况
对于严重的:Java通过Error类进行描述
对于非严重的:Java通过Exception类进行描述,并使用针对性的处理方式处理

throw关键字抛出异常对象,throw下面不要定义语句,因为执行不到,否则会编译失败的
throws关键字抛出异常类

异常处理:
Java提供了特有的语句进行处理:
try
{
需要被检测的代码
}
catch(异常类 变量)//catch是用于异常处理,如果没有catch代表没处理,如果时检测时异常,那么必须要声明(即继承)
{
处理异常的代码:处理方式
}
finally
{
一定会执行的语句
}

2.对捕获到的异常对象进行常见当打操作
String getMessage():获取异常信息eg:System.out.println(e.getMessage());
String toString() 获取异常名称:异常信息eg:System.out.println(e.toString());
void printStackTrace() 获取异常名称:异常信息,异常出现的位置eg:System.out.println(e.printStackTrace());//其实jvm默认的异常处理机制就是在调用printStackTrace()方法,打印异常的堆栈的跟踪信息

功能上通过throws的关键字声明了该功能可能会出现的问题 :throws Exception
碰到这样的功能要么就try catch,要么就抛出:就是也写上throws Exception
建立catch进行处理时,catch中一定要定义具体处理方式,不要简单定义一句e.printStackTrace()或输出语句

3.对多异常的处理:
1.声明异常时,建议声明更为具体的异常,这样处理可以更具体
2.对方声明几个异常,就对应几个catch块,不要定义多于的catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面

4.自定义异常:——必须要要继承Exception或RuntimeException,因为这样才有可抛性
当在函数内部出现了throw抛出异常对象,那么必须给对应的处理动作。要么在内部try catch处理,要么在函数上声明让调用者处理

例:定义一个不能除零,也不能除负数的功能。抛出的异常面向对象思想建立一个类描述这个异常

class FuShuException extends Exception
{ }
class Damo {
int div(int a,int b){
if(b<0)
throw new FuShuException();//手动通过throw关键字抛出异常对象,throw后的语句就不执行了
return a/b;
}
}
//打印出来只有异常名称没有异常信息,因为自定义的异常未定义信息

因为父类已经吧异常信息的操作完成了,所以子类只要在构造时,将异常信息传递给父类通过super语句,那么就可以直接通过getMessage方法获取自定义方法中的异常信息了
eg:class FuShuException extends Exception
{
FuShuException(String msg){
super(msg);
}
}

但有一个例外:RuntimeException:运行时异常,
如果在函数内容抛出了该异常,函数上可以不用声明,编译一样可以通过
如果在函数上声明了该异常,调用者可以不用进行处理(即不try catch),编译一样可以通过
之所以不用声明,是为了不让调用者处理,当该异常发生时,希望程序停止,然后对代码进行修正
所以自定义异常时,如果该异常的发生,无法继续进行运算,就让自定义异常继承RuntimeException

结论:自定义要么继承Exception,要么继承RuntimeException
对于异常分两类:
1.编译时被检测的异常
2.编译时不被检测的异常(运行时异常:即RuntimeException以及其子类)

5.finally代码块
定义一定要执行的代码
通常用于关闭资源,(数据库的例子:打开,操作,关闭)
除非catch中有系统退出:System.exit(0);//虚拟机结束 finally就不执行了
有return也会执行finally,但不会执行别的了

6.格式:
try catch finally
try catch
try finally

7.异常在子父类覆盖中的体现:
1.子类在覆盖父类时,如果父类方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或该异常的子类
2.如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集
3.如果父类或接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常,就必须进行try处理,绝对不能抛

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值