java基础-异常

Posted zz-coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础-异常相关的知识,希望对你有一定的参考价值。

1.简介

如果某个方法不能按照正常的途径完成任务,在这种情况下会抛出一个封装了错误信息的对象,此时这个方法会立刻退出同时不返回任何值,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器

自定义异常的话是继承一个异常类,通常是RumtimeException或者Exception

异常使用的原则

不要将异常处理用于正常的控制流

优先使用标准的异常,建议抛出更加具体的异常

异常信息一定要有意义,每个方法抛出的异常都要有文档,使用日志打印异常之后就不要再抛出异常了

不要在catch中忽略掉捕获到的异常

Java语言如何进行异常处理

Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。try用来指定—块预防所有异常的程序;catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型;throw语句用来明确地抛出一个异常;throws用来声明一个方法可能抛出的各种异常(当然声明异常时允许无病呻吟);finally为确保一段代码不管发生什么异常状况都要被执行

try语句可以嵌套,每当遇到一个try语句,异常的结构就会被放入异常栈中,直到所有的try语句都完成。如果下一级的try语句没有对某种异常进行处理,异常栈就会执行出栈操作,直到遇到有处理这种异常的try语句或者最终将异常抛给JVM

Throwable类常用方法

String getMessage():返回异常发生时的简要描述

String toString():返回异常发生时的详细信息

String getLocalizedMessage():返回异常对象的本地化信息。使用Throwable的子类覆盖这个方法,可以生成本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与getMessage返回的结果相同

void printStackTrace():在控制台上打印Throwable对象封装的异常信息

finlly不会执行的情况

在finally语句块第一行发生了异常。因为在其他行finally块还是会得到执行

在前面的代码中用了System.exit(int)已退出程序。exit是带参函数,若该语句在异常语句之后,finally会执行

程序所在的线程死亡

关闭cpu

try里有一个return语句,那么紧跟在这个try后的finally里的代码会不会被执行,什么时候被执行,在return前还是后

会在方法返回调用者前执行

如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在finally中修改了返回值,就会返回修改后的值

在finally中直接返回值也是不好的,因为这样会直接在finally中就把结果返回了,因此C#中直接用编译错误的方式来阻止程序员干上面两种龌龊的事情,Java中也可以通过提升编译器的语法检查级别来产生警告或错误

2.异常分类

受检查异常编译器在编译期间检查,对于这种异常,方法强制处理或者通过throws子句声明,不处理的话无法通过编译器的检查

非受检查异常是RuntimeException的子类,在编译阶段不受编译器的检查

受检异常

没有匹配方法的异常,没有匹配属性的异常,类找不到异常,方法找不到异常

运行时异常(非受检异常):

3.异常的处理方式

3.1.throw,throws抛出异常

位置不同:throws用在函数上,后面跟的是异常类,可以跟多个,而throw用在函数内,后面跟具体异常

功能不同:throws用来声明异常,让调用者只知道该方法可能出现的问题,可以给出预先的处理方式,throw抛出具体的问题对象,执行到throw方法就已经结束了,并将具体的问题对象抛给调用者

两者都是消极处理异常的方式,只是抛出或者可能抛出异常,真正的处理异常由函数的上层调用处理

3.2.try catch finally捕获异常

Try块必须存在,catch和finally可以不存在,但不能同时不存在

3.3.try with resources

面对必须要关闭的资源,我们应该优先使用try-with-resources而不是try-finally,因此这样的代码更简短清晰

到了java1.7后try-with-resources可以写成下面的形式

 

 

Java基础Java常见的异常

Java常见的异常

1. java.lang.NullPointerException (空指针异常)调用了未经初始化的对象或者是不存在的对象

2. java.lang.ClassNotFoundException 指定的类不存在

3. java.lang.NumberFormatException 字符串转换为数字异常

4. java.lang.IndexOutOfBoundsException 数组下标越界异常

5. java.lang.IllegalArgumentException 方法的参数错误

6. java.lang.IllegalAccessException 没有访问权限

7. java.lang.ArithmeticException 数学运算异常

8. java.lang.ClassCastException 数据类型转换异常

9. java.lang.FileNotFoundException 文件未找到异常

10. java.lang.ArrayStoreException 数组存储异常

11. java.lang.NoSuchMethodException 方法不存在异常

12. java.lang.NoSuchFiledException 方法(反射)不存在异常

13. java.lang.EOFException 文件已结束异常

14. java.lang.InstantiationException 实例化异常

15. java.lang.InterruptedException 被中止异常

16. java.lang.CloneNotSupportedException 不支持克隆异常

17. java.lang.OutOfMemoryException 内存不足错误

18. java.lang.NoClassDefFoundException 未找到类定义错误

19. SecturityException 违背安全原则异常

20. SQLException 操作数据库异常

21. IOException 输入输出异常

22. SocketException 通信异常


本文出自 “林元煌的博客” 博客,请务必保留此出处http://lyhmm.blog.51cto.com/1797932/1970046

以上是关于java基础-异常的主要内容,如果未能解决你的问题,请参考以下文章

Java基础-异常

3.3 java基础总结①异常②自定义异常

JAVA-基础-异常

java基础——认识异常

Java基础语法—— 认识异常

JAVA基础——异常详解