您的位置:首页 > 编程语言 > Java开发

请描述Java中异常处理机制的简单原理和应用,并说明Error与Exception有什么区别?

2012-09-19 22:32 1331 查看
1:请描述Java中异常处理机制的简单原理和应用,并说明Error与Exception有什么区别?

每当产生异常后,如果没有程序进行相应的处理,则程序会中断的现象,那么,此时实际上一旦产生一个异常之后,JVM会抛出一个异常类的实例化对象,如果此时使用了try语句进行捕获的话,则可以进行异常处理,如果没有的话,则交给JVM进行处理,当try语句捕获到了异常之后,会与catch中的异常类型进行匹配,如果匹配成功,则使用此catch语句进行处理。

应用:简单的应用,就是在所有throws关键字的地方加入try...catch

如果按照一个标准做法的话,try、catch、finally、throw、thorws关键字应该一起使用。

JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发 NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用 throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

eg:第一种

class Test{

public int devide(int x ,int y) throws Exception{ //

int result = x/y;

return result;

}

}

class TestException{

public static void main(String[] args){

try{

new Test().devide(3,0);

}catch(Exception e){

System.out.println(e.getMessage());//虽然Exception除了Constructor之外没有其它的函数,

//但它继承了Throwable类.

}

System.out.println("Program running here");

}

}

当编写Test class不知道它是否抛出异常时,可以在devide methods方法后添加 throws Exception 就可以..而在TestException中必须处理抛出的异常.

eg:第二种

如果自己定义异常类,必须继承Exception,也就是它的子类.

class Test{

public int devide(int x ,int y) throws Exception{ //

if(y < 0)

throw DevideMyMinusException("devide is" + y);

int result = x/y;

return result;

}

}

class DevideMyMinusException extends Exception{

public DevideMyMinusException (String msg){

super(msg); //调用父类(Exception)的Construtor,主函数getMessage()输出自定义的异常:"devide is..."

}

}

eg.第三种

可以抛出多个异常类.

class Test{

public int devide(int x ,int y) throws ArithmeticException,DevideMyMinusException{ //

if(y < 0)

throw new DevideMyMinusException("devide is" + y);

int result = x/y;

return result;

}

}

class DevideMyMinusException extends Exception{

public DevideMyMinusException (String msg){

super(msg);

}

}

class TestException{

public static void main(String[] args){

try{

new Test().devide(3,-1);

}catch(ArithmeticException e){

System.out.println("program running into ArithmeticException ");

e.printStackTrace();

}catch(DevideMyMinusException e){

System.out.println("program running into DevideMyMinusException");

e.printStackTrace();

}catch(Exception e){

System.out.println(e.getMessage)

)finally{

System.out.println("finally running");//不管程序发生异常没有,finally代码块都要执行.

}

System.out.println("Program running here");

}

}

1.程序根据异常类型的匹配.自动进入相应的catch语句.Exception应放在其它异常语句后,因为他们都继承Exception ,其它异常要放在后面,就没有什么意义了.

2.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 会执行,而且在return 前执行.

3.什么时候finally里的代码不会执行呢? 当出现System.exit(0);时,它不会执行,程序会退出.

Error和Exception的区别:

Java中的Error和Exception都是来之Throwable 这个Class的,是他的SubClass,

Error:是系统中的错误,程序员是不能改变,处理的,在程序编译的时候出现的错误.只有通过修改程序才能修正Error.

Exception:是在程序运行的时候捕捉的错误,是可以处理的异常.

语法是:try{}

catch(Exception 名字){}

finally

{进行资源的清理工作: 比如关闭打开的文件: 删除临时的文件; ....}

Exception:它也分两种:RuntimeException(是经常出现的错误可以不catch)和其他Exception(是必须要catch的,这样程序才能继续,像某个方法里面有throw IoException).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: