标签:
Java的基本理念是“结构不佳的代码不能运行”
为什么要使用异常?
首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率 |
异常定义:异常情形是指阻止当前方法或者作用域继续执行的问题。在这里一定要明确一点:异常代码某种程度的错误,尽管Java有异常处理机制,但是我们不能以“正常”的眼光来看待异常,异常处理机制的原因就是告诉你:这里可能会或者已经产生了错误,您的程序出现了不正常的情况,可能会导致程序失败!
那么什么时候才会出现异常呢?只有在你当前的环境下程序无法正常运行下去,也就是说程序已经无法来正确解决问题了,这时它所就会从当前环境中跳出,并抛出异常。抛出异常后,它首先会做几件事。首先,它会使用new创建一个异常对象,然后在产生异常的位置终止程序,并且从当前环境中弹出对异常对象的引用,这时。异常处理机制就会接管程序,并开始寻找一个恰当的地方来继续执行程序,这个恰当的地方就是异常处理程序,它的任务就是将程序从错误状态恢复,以使程序要么换一种方法执行,要么继续执行下去。
class SimpleException extends Exception{}//自定义异常类 try { throw new SimpleException(); } catch (Exception e) { e.printStackTrace(); }
public static void main(String[] args) throws SimpleException {throw new SimpleException(); }
int[] a=new int[4]; try{ System.out.println(a[4]);//此语句抛出异常,不会执行此后的try语句 System.out.print("hello"); //即不会执行 }catch (Exception e) { //找到相应的catch语句执行 System.out.print("越界"); } System.out.print("hello");//处理异常后会执行,如果不处理异常,则不执行
try { System.out.println("Point 1"); if(i==1) return; System.out.println("Point 1"); if(i==2) return; }catch (Exception e) { e.printStackTrace(); } finally{ System.out.println("00000"); } //main() f(1); f(2);
{ try { throw new RuntimeException(); } finally { System.out.println("e"); return; }
{ try { throw new RuntimeException(); } finally { System.out.println("e"); return; }
异常的限制:对于继承类,它如果所覆盖的方法有异常说明,则所列出的异常类,必须是基类该方法所列出的异常类的子集
class MyException1 extends Exception { } class A { public void proc(){ } } class B extends A { // 编译错误:因为A.proc没有异常说明,所以子类也不能有异常说明 // 解决的方法是为A.proc加上异常说明:throws MyException1 // 或者在throw new MyException1();加上try块并去掉异常说明 public void proc() throws MyException1 { throw new MyException1(); } } class MyException1 extends Exception { } class MyException2 extends Exception { } class A { public void proc() throws MyException1 { } } class B extends A { // 错误:因为A.proc只声明了MyException1异常 public void proc() throws MyException2 { } }
构造器是一个例外,继承类可以声明更多的异常类,但必须加上基类所声明的异常类:
class MyException1 extends Exception { } class MyException2 extends Exception { } class A { A() throws MyException1 { } public void proc() throws MyException1 { } } class B extends A { B() throws MyException1, MyException2 { } }
//abstract class public abstract void event() throws BaseballException; //interface public void event()throws rain; //implement class public void event(){}
public class Exception03 { static void f(){ try { throw new Exception(); } catch (Exception e) { for(StackTraceElement ste:e.getStackTrace()) System.out.println(ste.getMethodName()); } } static void g(){f();} static void h(){g();} public static void main(String args[]){ f(); System.out.println("____________"); g(); System.out.println("____________"); h(); } }
标签:
原文地址:http://blog.csdn.net/xu5025/article/details/42361601