标签:
java异常是指java提供的用于处理程序运行过程中错误的一种机制
所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,索要读取的文件不存在等)
设计良好的程序应该在异常发生时提供处理这些错误的方法,是的程序不会因为异常的发生而阻断或产生不可预见的结果
java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被其提交给java运行系统,这个过程成为抛出(throw)异常
当java运行时系统接受到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程成为捕获(catch)异常
//一个捕获异常的示例 public class test { public static void main(String args[]) { try { System.out.println(2/0); } catch (ArithmeticException ae) { System.out.print("运行出错!"); } } }
Throwable:可被抛出的
Error:系统错误,做自己处理不了的
Exception:自己可以做处理的,可以catch的
RuntimeExpetion:经常出的错误(这种错误可以catch,也可以不catch)
还有一种exception是必需要去捕获的
try { //可能抛出异常的语句 } catch ( SomeException1 e ) { ...... } catch ( SomeException2 e) { ...... } finally { ...... }
try{
} catch ( ) {
} finally (){
}
对于一些自己处理不了的异常或是自己不想去处理的异常,可以直接往外抛异常,这样就可以不用在代码段中加try{}catch{}
//一个抛出异常的例子 public class test { public static void main(String args[]) throws IOException { test(); } static void test() throws IOException { System.out.println(2/0); } }
//不加try...catch的另外一种抛异常方法 public class test { public static void main(String args[]) throws IOException { int i = 0; if (i == 0) { throw new IOException("出错了"); } } }
看一个例子,这就是打印的堆栈信息,虽然报错很多行,但是或许只要更改一次就可以解决:
另外在捕获异常的时候注意下面这种问题:
使用自定义异常一般有如下步骤:
1.通过继承java.lang.Exception类声明自己的异常类
2.在方法适当的位置生成自定义异常的实例,并用throw语句抛出
3.在方法的声明部分用throws语句声明该方法可能抛出的异常
//创建一个exception类存放自己的exception public class MyExpection extends Exception { private int id; public MyExpection (String message,int id) { super(message); this.id = id; } public int getId() { return id; } }
//测试类 public class Test { //定义一个方法 public void regist(int num) throws MyExpection { if(num < 0) { throw new MyExpection("不应该为负值", 3); } System.out.println("登记人数: "+ num); } //定义另一个方法 public void manager() { try { regist(100); } catch (MyExpection e) { System.out.println("登记失败,出错类型码="+e.getId()); e.printStackTrace(); } System.out.println("操作结束!"); } //程序入口main方法 public static void main(String[] args) { Test t = new Test(); t.manager(); } }
可以自己调试输出
注意:
当原方法有异常时重写该方法需要抛出与原方法所抛出异常类型一致的异常或不抛出异常,其他情况都无法进行重写
标签:
原文地址:http://www.cnblogs.com/JianXu/p/5576183.html