您的位置:首页 > 职场人生

黑马程序员_java异常

2014-07-21 10:18 253 查看
---------------Android培训java培训、期待与您交流!--------------

在java中,异常会导致运行时错误。异常就是一个表示阻止执行正常进行的错误或情况。如果异常没有被处理,那么程序将会非正常终止。该如何处理这个异常,以使程序可以继续运行或者平稳终止呢?

不正常的情况分为两大类:
1、一般不可处理:Error
特点:有jvm抛出的严重性问题,这种问题一般不针对性处理,直接修改程序。
2、可处理的:Exception
Throwable:该体系的特点就在于可抛性,Throwable及其所有的子类都具可抛性。

Exception异常分类:
1、编译时被检测异常。只要是Exception除RuntimeException及其子类之外都是,这种问题一旦出现。希望在编译时就进行检测,让这种问题有对应的处理方式。
2、编译时不坚持异常(运行时异常)。就是RuntimeException和其子类。这种问题的发生,无法让功能继续,运算无法进行,更多是因为调用者或者引发了内部状态的原因导致的。这种问题一般不处理,直接变异通过。在运行时,让调用者调用时的程序强制停止,让调用者对代码进行修改。

从异常中获取信息

getMessage():String:获取这个异常的信息

toString():String:返回三个字符的连接:①异常类的全名;②“:”(冒号或空格);③getMessage()方法

printStackTrace():void:获取异常类名和信息,以及异常出现的位置。

异常的处理模型基于三种操作:声明一个异常,抛出一个异常和捕获一个异常。
1、声明异常。在java中,当前执行的语句必属于某个方法。每个方法都必须声明它可能抛出的必检异常的类型。这就要在方法中声明一个异常,在方法头中使用关键字throws。如果方法抛出多个异常,就可以在关键字throws后添加一个用逗号分隔的异常列表:
public void myMethod() throws Exception1, Exception2,…… ExceptionN
2、抛出异常。检测一个错误的程序可以创建一个正确异常类型的实例来抛出它。抛出异常的关键字是throw(用在函数内)。如:
throw new IOException("string")
3、捕获异常。当抛出一个异常时,可以在try-catch-finally块中捕获和处理它。如:

try{

可能出现异常的代码

}

catch(Exception1 ex){

异常处理代码1

}

catch(Exception2 ex){

异常处理代码2

}

……

catch(ExceptionN ex){

异常处理代码N

}

finally{

释放资源

}

如果在执行try快的过程中,没有出现异常,则跳过catch子句。

try-catch-finally 组合特点:
1、try-catch-finally
2、try-catch(多个):当没有必要资源释放时,可以不用定义finally。
3、try-finally:异常无法直接catch处理,但是资源需要释放关闭。

finally语句永远被执行,即使在到达finally块之前有一个return语句,finally语句还是会执行。除非退出jvm:System.exit(0);

链式异常:有时候,可能需要同原始异常一起抛出一个新异常,如,
public class Demo{

public static void main(String[] args){

try{

//main方法调用method1

method1();

}

//method1抛出的新异常被捕获

catch(Exception ex){

ex.printStackTrace();//首先显示method1中抛出的新异常,然后显示method2中抛出的原始异常。

}

}

public  static void method1() throws Exception{

try{

//method1调用method2

method2();

}

//method2异常被捕获

catch(Exception ex){

//包装新异常

throw new Exception("New info form method1",ex);

}

}

public static void method2() throw Exception{

//method2 抛出异常

throw new Exception("New info form method2");

}

}

自定义异常:定义类继承Exception或者RuntimeException类。
class MyException extends Exception{

MyException(){

}

MyException(String message){

super(message);

}

}



class MyException extends rRuntimeException{

MyException(){

}

  MyException(String message){

super(message);

  }

}

子类父类间异常的继承。子类覆盖父类只能抛出父类的异常或者异常的子类或其子集,如果父类的方法没有抛出异常,那么子类绝对不能抛,只能try。在catch块中,如果能够捕获一个父类的异常对象,它就能捕获那个父类的所有子类的异常对象。

在catch块中异常被指定的顺序也很重要。如果父类的catch块出现在子类的catch块之前,就会导致编译错误。

异常的处理原则:

1、函数内容如果抛出需要检测的异常,那么函数上必须要声明,否则必须在函数内用try-catch捕捉,否则编译失败。

2、如果调用到了声明异常的函数,要么try-catch要么throws,否则编译失败。

3、功能内部可以解决,用catch;解决不了,用throws告诉调用者,由调用者解决。

4、一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性处理。

对异常的巩固先到此了,概念比较多,需要多记多背。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: