---------------------- <a href="http://edu.youkuaiyun.com/heima" target="blank">android培训</a>、<a href="http://edu.youkuaiyun.com/heima" target="blank">java培训</a>、期待与您交流! ----------------------
异常是对问题的描述,将问题进对象的封装。
异常体系:
Throwable
--Error
--Exception
--RuntimeException
异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性。也就是说可以被throw和throws关键字所操作。只有异常体系具备这个特点。
throw和throws的用法:
throw定义的函数内,用于抛出异常对像。
throws定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开。
当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明,都在编译失败。
注意:RuntimeException除外,也就说,函数内如果抛出的RuntimeExcpetion异常,函数上可以不用声明。。
如果函数声明了异常,调用者需要进行处理,处理方法可以throws可以try。
一般try catch finally 格式:一个try快多个 catch快 一个finally块。finally块中的语句的绝对会执行的,不管是否出现异常,catch中的异常是要遵循子前父后的.Throws 将异常抛给上级调用方法,上级的调用方法可以自己处理,也可以继续抛出.
Error和 Exception都是Throwable的直接子类
Error 错误 程序员处理的错误,比如内存的问题,建议直接终止程序
Exception 程序可以去解决的这样一些异常 大部分是程序员在编码的过程中可以控制的
Exception类可以分为两种:运行时异常和受检查异常。
1、运行时异常
RuntimeException类及其子类都被称为运行时异常,这种异常的特点是Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。例如,当除数为零时,就会抛出java.lang.ArithmeticException异常。
2、受检查异常
除了RuntimeException类及其子类外,其他的Exception类及其子类都属于受检查异常,这种异常的特点是要么用try...catch捕获处理,要么用throws语句声明抛出,否则编译不会通过。
3、两者的区别
运行时异常表示无法让程序恢复运行的异常,导致这种异常的原因通常是由于执行了错误的操作。一旦出现错误,建议让程序终止。
受检查异常表示程序可以处理的异常。如果抛出异常的方法本身不处理或者不能处理它,那么方法的调用者就必须去处理该异常,否则调用会出错,连编译也无法通过。当然,这两种异常都是可以通过程序来捕获并处理的,比如除数为零的运行时异常:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!!!");
try{
System.out.println(1/0);
}catch(ArithmeticException e){
System.out.println("除数为0!"); System.out.println("除数为零后程序没有终止啊,呵呵!!!");}
运行结果:
Hello World!!!
除数为0!
除数为零后程序没有终止啊,呵呵!!!
4、运行时错误
Error类及其子类表示运行时错误,通常是由Java虚拟机抛出的,JDK中与定义了一些错误类,比如VirtualMachineError
和OutOfMemoryError,程序本身无法修复这些错误.一般不去扩展Error类来创建用户自定义的错误类。而RuntimeException类表示程序代码中的错误,是可扩展的,用户可以创建特定运行时异常类。
Error(运行时错误)和运行时异常的相同之处是:Java编译器都不去检查它们,当程序运行时出现它们,都会终止运行。
5、Java异常处理的原则和技巧
1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。
2、细化异常的类型,不要不管什么类型的异常都写成Excetpion。
3、catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。
4、不要把自己能处理的异常抛给别人。
5、不要用try...catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况
JAVA异常机制的处理
try catch结构的异常处理提供了这样一种机制,如果代码执行成功,程序流程正常,则catch后面的语句块不会执行;如果执行try 后面的块代码前语句出现异常,则该语句块将不会执行,程序跳到catch后面的语句块开始执行,同时catch语句块中可以得到Exception类型的 变量对这个异常对象的引用,可以调用printStackTrace()方法;该方法打印出异常的详细信息;这认为程序从中恢复提供了可行的手段。需要注 意的是try catch块中变量的作用域:try块中定义的变量符合变量的作用范围的规则,即变量只能在限定自己最近的一对大括号内使用;如果方法没有定义返回值,这 个方法就有可以在正常执行时有一个返回值,或在catch到的异常时有个返回值。
JAVA异常的抛出
在定义方法时,可以使用throws关键字声明方法可能会抛出异常;当另外一个方法调用了一个声明了可能抛出异常的方法时,要么将调用这个方法的 代码放入try catch 块中;要么将调用方法也抛出异常,极端的形式是每个方法都有声明为异抛出常,在调用中都不适用try catch块,知道main函数也声明为抛出异常,一旦出错,这个异常将提交给JVM,JVM默认在控制台打印出异常信息后退出程序。如果方法体中使用 throws关键字抛出一个Exception类型的对象,在方法声明中就必须使用throws关键字声明,throws后面异常类名字必须是 throws抛出异常对象的类型或其父类类型。
---------------------- <a href="http://edu.youkuaiyun.com/heima" target="blank">android培训</a>、<a href="http://edu.youkuaiyun.com/heima" target="blank">java培训</a>、期待与您交流! ----------------------