java基础之异常

1. 异常:
简单说就是不正常,在程序运行时出现不正常的情况。

当程序运行时出现了不正常的情况,其实就是程序运行出现了问题;这个问题按照 java 面向对象的思想,就把程序在运行中出现的问题包装成一个异常类对象;这个对象包含问题的各种基
本信息,例如异常问题产生的原因,出现的异常问题名称,异常问题的描述等各种属性。为了对出现的多种属性值进行有效的管理,做好的办法就是将问题封装成类对象;异常就是根据 java 
的面向对象思想,将异常问题封装成类对象,这样便于操作问题和问题的解决。

2.  异常体系:
就是对异常问题进行分类,而且这些问题都有共性问题;例如:异常问题的命名,异常的问题的信息描述,异常问题的出现的位置及原因;这样就可以不断的向上抽取出来,从而形成了异常
体系。

3. java.lang.Throwable:
-Throwable
--Error:
错误,一般不编写正对性代码;这是 jvm 虚拟机运行过程中出现了错误,必须对程序进行修改修正。
--Exception
异常:根据出现的异常,进行相应的处理。

4. 注意 Error 和 Exception 的区别:
Error :属于编译时期的错误,出现 Error 错误;编译不会通过,不会加载 类.class 文件。Erroe 想要恢复是比较困难的,像内存溢出等。

Exception :属于运行时错误,只有在调用时才会报错。例如数组越界,控指针等。只要程序设计没有问题,一般不会出现异常问题。

无论是错误还是异常,它们都有具体的子类体现每一个问题,它们的子类都有一个共性,就是都以父类名才作为子类的后缀名。

5. 在 Exception 异常体系中所有的异常类和异常对象都是可抛的
其中可抛可以利用 throw 和 throws 这两份关键字。

在开发时,如果要定义功能,则在定义了功能的同时,也要将该功能可能会出现的问题和异常,在旁边标示出来;这样调用者就可以根据标示知道会出现的问题异常,从而给出相应的

预处理方法。  

通过throws关键字完成标示,格式:throws 异常类名,异常类名...

这样标示后,调用者,在使用该功能时,就必须要处理,否则编译失败。

注意 throw 和 throws 抛出的区别: throw 在方法内进行抛出,并且抛出的是异常类对象,一次只能抛出一个; throws 则是在方法上进行抛出,但是抛出的是异常类,一次可以抛出多个

,通过使用 , 隔开。

6. 异常处理:
异常处理有两种方式:第一种是通过 throw 或者 throws 来一层一层的往上层抛出;第二种是通过 try{}catch(){} 来进行捕捉然后在处理。

异常处理的原则:功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。

特殊情况:try对应多个catch时,如果有父类的catch语句块,一定要放在下面。

通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。

7. 异常分为两种:一般 Exception 异常和 RunTimeException 异常
编译时异常,一般系统会在编译时期检测异常类,只要是 Exception类或者是它的子类在编译时期都会被检测异常。

运行时异常,Exception 有一个特殊的子类 RunTimeException 类,RunTimeException 类以及它的子类都不会编译时检测,只有在运行的时候检测发生异常。

8. 编译时异常和运行时异常的区别:
编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。

声明的原因:是需要调用者对该异常进行处理。

运行时异常如果在函数内被抛出,在函数上不需要声明。

不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。

9. 定义异常处理时,什么时候用 try 什么时候用 throw ?
功能内部出现异常时,如果功能内部可以进行处理,就是用 try 语句进行异常处理。

如果功能内部不能进行处理,就必须对异常进行抛出声明出来,然后在让调用者来进行处理。

10. 自定义异常:
当开发项目时,项目中出现 java 中没有定义过的异常;这个时候就需要开发者自己根据出现的异常问题,利用 java 的面向对象方法,把异常错误信息封装成对象。这个异常,我们则称之
为自定义异常。

例如:
对于除法运算,0作为除数是不可以的。java中对这种问题用ArithmeticException类进行描述。对于这个功能,在我们项目中,除数除了不可以为0外,还不可以为负数。可是负数的部分java
并没有针对描述。所以我们就需要自定义这个异常。

自定义异常的步骤:定义一个子类继承于 Exception 或者 RuntimeException,让子类具有可抛性;再通过 throw 和 throws 对异常进行抛出操作。

11. 异常的转换思想:
当出现了调用者处理不了的异常时,调用者需要将其转换成可以处理的异常,再对其进行抛出操作。

12. try  catch  finally的几种结合方式:
1 2 3
try try try
catch catch finally
finally

在第三种情况下,只是对异常进行了步骤,而没有对其进行处理,然后在对其进行资源关闭。该组合的主要功能也是进行资源关闭。

注意: finally 的作用,主要是关闭资源。无论是否发生异常,都必须关闭资源。

finally 只有在 System.exit( 0);表示退出虚拟机的情况下不会执行,其他情况下都是最后执行的。

13. 当异常出现后,在子父类进行覆盖时,有了一些新的特点:
当子类覆盖父类的方法时,如果父类的方法抛出了异常,那么子类的方法要么不抛出异常要么抛出父类异常或者该异常的子类,不能抛出其他异常。

如果父类抛出了多个异常,那么子类在覆盖时只能抛出父类的异常的子集。

14. 注意:
如果父类或者接口中的方法没有抛出过异常,那么子类是不可以抛出异常的,如果子类的覆盖的方法中出现了异常,只能try不能throws。

如果这个异常子类无法处理,已经影响了子类方法的具体运算,这时可以在子类方法中,通过throw抛出RuntimeException异常或者其子类,这样,子类的方法上是不需要throws声明的。

15. 常见的异常类:
ArrayIndexOutofBoundException , NullPointException , SQlException , IOException , ClassFormatException ,ClassCastException ...

16. 异常要尽力避免,当无法避免的时候就需要提前预处理。例如家里一般都会事先准备好感冒药,杀虫剂等等。

17. 总结:

异常是什么?是对问题的描述,将问题对象进行封装。

异常体系:Throwable
--Error
--Exception
 --RuntimeException

异常体系的特点:异常体系中的所有类以及建立的对象,都具有可抛性。也就是都可以被 throw 和 throws 所操作。 注意只有异常体系具有这个特点。

throw 和 throws 的区别及用法。

当函数内有 throws 抛出异常对象,并未进行 try 处理,必须要在函数上声明,否则就会编译失败。注意 RuntimeException 异常除外。

如果函数声明了异常,调用者需要处理。处理方式 可抛 可 try。

异常有两种:一种是编译时被检测异常,该异常如果没有处理(没有抛没有 try)则编译失败。   一种是运行时异常,在编译时不需要处理,编译器不检查。

异常处理的语句: 三种

try
{
需要被检测的语句
}
catch()
{
处理异常的语句
}
finally()
{
一定会执行的语句
}

finally 只有一种情况下不会执行。 System.exit( 0);

自定义异常:自定义类继承 Exception 或者 RuntimeException。当要定义自定义异常的信息时,可以使用父类已经定义好的功能。

自定义异常:按照 java 的面向对象思想,将程序中出现的特有问题进行封装。

异常的好处: 1.将问题进行封装   2.将正常流程代码和异常处理代码相分离,方便阅读。

异常的处理原则: 1.处理方式有两种: throws 和 try   2.调用到抛出异常的功能时,抛出几个,就处理几个。一个 try 对应多个 catch   3.多个 catch ,父类的 catch 放在


最下面 4.catch 内需要针对性的处理方式,不要简单的写个 printStackTrace(),或者什么都不写。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值