java异常处理

来源:互联网 发布:亚马逊windows 编辑:程序博客网 时间:2024/06/03 12:44

java异常处理

java异常机制

  • 首先什么叫做异常呢
    异常指的是程序中出现的非致命性的,通过修正还能继续执行的错误叫做异常,如果出现了致命性的错误那就不叫异常了。
  • 产生异常的几种情况

    • java虚拟机检测到了异常,这些异常可能是以下几种情况造成的:
      1.表达式计算违反了语义,如整数被零除。
      2.超出了某些资源的限制,如使用了太多的内存。

    • java中的throw语句被执行,异常被抛弃时。

    • 异常同步发生,由以下原因引起:
      1.thread的stop方法被调用
      2.java虚拟机内部错误发生

Error和Exception

他们都继承了throwable类,error通常指的是错误通常都是不可能通过代码来解决的问题,在程序中我们不会捕获error。
exception指的是异常,我们在程序中通常捕获的是Exception和Exception的子类的异常,它们又分为运行时异常和非运行时异常。

几种常见运行时异常 描述 ArithmeticException 当出现异常的运算条件时,抛出此异常。例如,一个整数”除以零”时,抛出此类的一个实例。 ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。 ArrayStoreException 试图将错误类型的对象存储到一个对象数组时抛出的异常。 ClassCastException 当试图将对象强制转换为不是实例的子类时,抛出该异常。 NumberFormatException 当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。 NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常
几种常见非运行时异常 描述 ClassNotFoundException 应用程序试图加载类时,找不到相应的类,抛出该异常。 CloneNotSupportedException 当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。 IllegalAccessException 拒绝访问一个类的时候,抛出该异常。 InstantiationException 当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。 InterruptedException 一个线程被另一个线程中断,抛出该异常。

java中如何进行异常处理

1.try … catch … finally…

try{   // 可能发生异常的程序代码}catch(异常类型1 异常的变量名1){  // 异常处理程序代码}catch(异常类型2 异常的变量名2){  // 异常处理程序代码}catch(异常类型3 异常的变量名3){  // 异常处理程序代码}finally{//最终执行,这一段代码一定会执行。}//finally{}可以省略

2.使用throws抛出异常
使用throws可以抛出一个或者多个异常,形式如下:

 public void withdraw(double amount) throws RemoteException,                              InsufficientFundsException   {       // Method implementation   }

3.通过throw抛出异常
抛弃的异常必须是Throwable或其子类的实例,形式:

throw 异常名

4.自定义异常
通过定义一个Exception来的子类来自定义一个非运行时异常;定义一个RuntimeException来的子类来自定义一个运行时异常。
通过如下形式来自定义异常:

class MyException extends Exception{}//或者class MyException extends RuntimeException{}

demo:

import java.io.IOException;public class Test {    public static void main(String[] args) throws ArithmeticException {        // TODO Auto-generated method stub        int a[] = new int[2];        try {            System.out.println("获取a[3]:" + a[3]);        } catch (ArrayIndexOutOfBoundsException e) {            System.out.println("Exception thrown  :" + e);        } catch (Exception e) {            e.printStackTrace();        } finally {            System.out.println("The finally statement is executed");        }        try {            int z = 2;            throw new MyException();        } catch (MyException me) {            me.printStackTrace();        }    }}

public class MyException extends Exception{    public MyException(){        super();    }    public MyException (String msg){        super(msg);    }    public MyException(String message, Throwable cause) {        super(message, cause);    }    public MyException(Throwable cause) {        super(cause);    }}
原创粉丝点击