java异常处理

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);
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值