转自http://blog.csdn.net/justdb/article/details/7875765,corejava异常处理知识点总结
1. error和exception有什么区别? (它是Throwable的两个子类)
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
java常见异常:下标越界,空指针异常,数学运算异常。没有访问权限。类型转换异常。
异常又分为运行时异常和输入输出异常。
2.异常的处理机制?
如果过多得使用if,else进行处理,程序将会变得冗长。
java采用异常处理机制,将异常处理得代码集中在一起,和正常得代码分开,使程序简洁,便于维护。
抛出异常:
抓抛模型:java程序得执行过程中,如果出现异常,会自动生成一个异常类对象,该对象会被提交给java运行时的系统。这个过程称为抛出异常。(throw)
捕获异常:
如果一个方法抛出异常,该异常会被抛到调用方法中,如果异常没有在调用方法中处理,他机会被抛给这个调用方法的调用者,这个过程将会一直持续下去,知道这个异常被处理,这个过程称为捕获异常(catch)。
如果一个异常回到main()方法并且main方法也不处理,那么程序运行会终止。
程序员只能处理exception,而对error无能为力。
try..catch
try后面可以放多个catch,每一个异常做一个catch以处理多个异常,一般把父类放在后面。
try { // 可能发生异常的代码 // 如果发生了异常,那么异常之后的代码都不会被执行 } catch (Exception e) { // 异常处理代码 } finally { // 不管有没有发生异常,finally语句块都会被执行 }
所谓自定义异常,通常就是定义一个类,去继承Exception类或者它的子类。因为异常必须直接或者间接地继承自Exception类。 通常情况下,会直接继承自Exception类,一般不会继承某个运行时的异常类。 自定义异常可以用于处理用户登录错误,用户输入错误提示等。 自定义异常的例子: 自定义一个异常类型:
public class MyException extends Exception { public MyException() { super(); } public MyException(String message) { super(message); } } 一种异常处理方式: public class ExceptionTest4 { public void method(String str) throws MyException { if(null == str) { throw new MyException("传入的字符串参数不能为null!"); } else { System.out.println(str); } } public static void main(String[] args) throws MyException //异常处理方式1,不断向外抛出 { ExceptionTest4 test = new ExceptionTest4(); test.method(null); } } 第二种处理异常方式: public class ExceptionTest4 { public void method(String str) throws MyException { if (null == str) { throw new MyException("传入的字符串参数不能为null!"); } else { System.out.println(str); } } public static void main(String[] args) { //异常处理方式2,采用try...catch语句 try { ExceptionTest4 test = new ExceptionTest4(); test.method(null); } catch (MyException e) { e.printStackTrace(); } finally { System.out.println("程序处理完毕"); } } }
原文:http://my.oschina.net/u/2480757/blog/514773