Java异常处理

目录

1、异常体系结构

2、异常处理方式

        2.1、try-catch-finally     

        2.2、throws+异常类型

3、用户自定义异常 


1、异常体系结构

        1、Throwable ==  Error  +  Exception

                1.1、Error:java虚拟机无法解决的严重问题

                1.2、Exception == CheckedException(编译时异常)+RunTimeException(运行时异常)

                        1.2.1、CheckedException:可以处理的异常。try-catch或者throws方式处理

常见有:IOException、ClassNotFoundException、SQLException、FileNotFoundExcepton等

                        1.2.2、RunTimeException:程序的逻辑错误

常见有:NullPointerException、IndexOutOfBoundsException、ClassCastException等

注意点:

1、RunTimeException类或者它的子类即使没有try-catch捕获,java自己也能捕获,并且编译通过(但运行时会发生异常使得程序运行终止)

2、如果抛出的异常是IOException等非运行时异常。必须捕获,否则编译不通过。

2、异常处理方式

        2.1、try-catch-finally     

定义:
        如果一个方法内抛出异常,该异常对象会被抛给调用者方法中处 理。如果异常没有在调用者方法中处理,它继续被抛给这个调用 方法的上层方法。这个过程将一直继续下去,直到异常被处理。 这一过程称为捕获(catch)异常
使用:
try{ ...... //可能产生异常的代码
}
catch( ExceptionName1 e ){ ...... //当产生ExceptionName1型异常时的处置措施
}
catch( ExceptionName2 e ){ ...... //当产生ExceptionName2型异常时的处置措施
        // e.getMessage() 获取异常信息,返回字符串
        // e.printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置
}
finally{ ...... //无论是否发生异常,都无条件执行的语句
注意点:
        1、如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可
以用其父类作为catch的参数。
        2、通常只能处理Exception,而对Error无能为力。

        2.2、throws+异常类型

定义:
        1、如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这
种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,
而由该方法的调用者负责处理
        2、在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可
以是方法中产生的异常类型,也可以是它的父类。
使用:
public void readFile(String file) throws FileNotFoundExcepton{
        //FileInputStream fis = new FileInputStream(file);
}
注意点
重写方法不能抛出比被重写方法范围更大的异常类型。

3、用户自定义异常 

        3.1、用户自定义异常一般都是RuntimeException的子类。通过throw抛出

class MyException extends Exception {   // 或者继承RuntimeException
    static final long serialVersionUID = 13465653435L; // 标识这个类
    private int idnumber;
    public MyException(String message, int id) {
        super(message);
        this.idnumber = id;
    }
    public int getId() {
        return idnumber;
    }
}

public class MyExpTest {
    public void regist(int num) throws MyException {
        if (num < 0)
            throw new MyException("人数为负值,不合理", 3);
        else
            System.out.println("登记人数" + num);
        }
    public void manager() {
        try {
            regist(100);
        } catch (MyException e) {
            System.out.print("登记失败,出错种类" + e.getId());
        }
        System.out.print("本次登记操作结束");
    }
    public static void main(String args[]) {
        MyExpTest t = new MyExpTest();
        t.manager();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值