异常的概念:
异常就是在程序的运行过程中所发生的不正常事件,它中断代码的正常执行。
对于异常的划分有两种:
Error(严重异常) Exception(非严重异常)
注:对于Error不编写针对性的代码进行处理.
注:对于Exception可以编写针对性的代码进行处理.
Error和Exception都继承制 Throwable
Java中的异常处理机制的简单原理和应用:
当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。
异常和错误的区别:
Error是程序无法处理的错误,大多数的错误与编码者的程序无关而是JVM出现的问题。
Exception是程序可以处理的异常, Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
Exception 异常分类:
运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
运行时异常与异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
异常的处理机制:
抛出异常和捕捉异常。
当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。
下列几种情况finally块不会被执行
1、在finally语句块中发生了异常。
2、在前面的代码中用了System.exit()退出程序。
3、程序所在的线程死亡。
4、关闭CPU。
throws与throw的区别:
throws:throws关键字通常被应用在声明方法时,用来抛出异常可以抛出多个异常用逗号隔开。Throws在方法定义的时候使用。
throw:throw关键字通常用于方法体中,并且抛出一个异常对象,当程序运行到throw语句处时会立即终止后面的代码都不会被运行,通过throw抛出异常后,如果想再上一级代码中来捕获异常并处理异常则需要在抛出异常的方法声明处使用throws来抛出异常,如果要捕获异常则必须要是用 try catch 语句块。Throw在函数体里面使用。
Java常见的异常:
runtimeException子类
1、 java.lang.ArrayIndexOutOfBoundsException
数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
2、java.lang.ArithmeticException
算术条件异常。譬如:整数除零等。
3、java.lang.NullPointerException
空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等
4、java.lang.ClassNotFoundException
找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。
IOException
FileNotFoundException 文件未找到异常
其他:
ClassCastException 类型转换异常类
SQLException 操作数据库异常类
NoSuchFieldException 字段未找到异常
NoSuchMethodException 方法未找到抛出的异常
IllegalAccessException 不允许访问某类异常
NumberFormatException 字符串转换为数字抛出的异常
自定义异常: 在开发过程中会出现一些特殊的异常但是在java中并没有对这些特殊的异常进行处理,所以就需要我们自己对异常进行封装 。
自定义异常只需要继承Exception类就是个自定义的异常类了。
使用自定义异常类的步骤:
(1)创建自定义异常类。
(2)在方法中通过throw关键字抛出异常对象。
(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
(4)在出现异常方法的调用者中捕获并处理异常。
JAVA语言如何进行异常处理:
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
关键字:Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
Try:来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch句子来指定想要捕捉的"异常"的类型。
Throw:语句用来明确地抛出一个"异常"。
Throws:用来标明一个成员函数可能抛出的各种"异常"。
Finally:为确保一段代码不管发生什么"异常"都被执行一段代码。
catch :通过捕捉想要捕捉的"异常"的类型