异常类

7.31学习心得

1. 异常类层次结构

  • Exception:处理用户程序应当捕获的异常情况。

  • Error:Error 类的异常为内部错误,因此在正常情况下不期望用户的程序捕获它们 。

层次结构

2. Java 异常类

Java异常类

3. 异常处理块的一般形式

异常处理一般形式

4. throw 与 throws 区别

  • throw(抛出异常):如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理。

  • throws(声明异常):throws 是方法可能抛出异常的声明。

5. 用户自定义异常

(1)创建一个类继承 Exception 或其子类;

(2)为该异常类添加构造方法;

(3)在一个方法中使用throw抛出异常;

(4)在另一个方法中捕获并处理异常。

课堂作业:

1.编写如下异常类:
空异常(NullException ,年龄低异常(LowAgeException),年龄高异常(HeightAgeException),
工资低异常(LowSalaryException),工资高异常(HighSalaryException),身份证非法异常(IdCardException)
2.编写一个员工类,
(1) 有属性:
编号,姓名,年龄,工资,身份证号码,员工人数(10),员工工资总额(10000)
(2) 有构造器:
构造器1:设置编号,年龄,姓名;如果年龄小于18,抛出年龄低异常;如果年龄大于60
抛出年龄高异常,如果姓名为null或为空字符串,抛出空异常。
构造器2:设置工资,设置身份证号码;如果工资低于600,抛出工资低异常。
如果身份证不是18位,抛出身份证非法异常。
(3) 有方法
增加工资 addSalary(double addSalary),抛出工资高异常,当增加后的工资大于员工工资总额时,抛出此异常。
减少工资 minusSalary(double minusSalary), 抛出工资低异常,当减少后的工资低于政府最低工资时,抛出工资低异常。
显示员工工资总额方法:showTotalSalary(),抛出空异常,当工资总额为0时,抛出此异常。
显示员工人数:voidshowTotalEmployee(),抛出空异常。当员工人数为0时,抛出此异常
3.编写main主测试类
分别生成3个员工,测试构造方法的异常抛出。
每个员工分别增加,减少工资,测试方法的异常。
显示员工的人数和工资总额。

实现:

NullException 类:(所有异常类格式差不多)

方式一:

public class NullException extends Exception {

    private String name;

    public NullException(String name) {
        this.name = name;
    }

    public String toString() {
        return "空异常!";
    }

}

方式二:

public class NullException extends Exception {
    public  NullException(){
        super();
    }
    public  NullException(String message){
        super(message);  
    }
}

employees 类:(也可直接给异常类赋值显示出来实现)

public class employees {

    private int id;
    private String name;
    private int age;
    private double pay;
    private String idcard;
    private final int num = 10;
    private final double payNum = 10000;

    public employees(int i, int a, String n) throws LowAgeException, HeightAgeException, NullException {
        this.id = i;
        this.age = a;
        this.name = n;

        if(age < 18) {
            throw new LowAgeException(age);
        } else if (age > 60) {
            throw new HeightAgeException(age);
        } else if (name == "" || name == null) {
            throw new NullException(name);
        } 
    }

    public employees(double p, String ic) throws LowSalaryException, IdCardException{
        this.pay = p;
        this.idcard = ic;

        if(pay < 600)
        {
            throw new LowSalaryException(pay);
        } else if (idcard.length() < 5) {
            throw new IdCardException(idcard);
        }
    }

    public void addSalary(double addSalary) throws HighSalaryException{
        pay += addSalary;

        if(pay > payNum){
            throw new HighSalaryException(pay);
        }   
    }

    public void minusSalary(double minusSalary) throws LowSalaryException {
        pay -= minusSalary;

        if(pay < 600){
            throw new LowSalaryException(pay);
        }
    }

    public void showTotalSalary() throws NullException{
        if(pay == 0){
            String pp = String.valueOf(pay);
            throw new NullException(pp);
        }
        System.out.println(pay);
    }

    public void showTotalEmployee(){
        /*if(num == 0){
            String n = String.valueOf(num);
            throw new NullException(n);
        }*/
        System.out.println(num);
    }

}

main 函数:

public class work2 {

    public static void main(String[] args) {

        /*try {
            employees aa = new employees(1, 18, "aa");
            employees bb = new employees(1, 20, "bb");
            employees cc = new employees(1, 70, "cc");
        } catch (NullException e) {
            System.out.println(e);
        } catch (LowAgeException e) {
            System.out.println(e);
        } catch (HeightAgeException e) {
            System.out.println(e);
        }*/

        try {
            employees dd = new employees(800, "15487");
            employees ee = new employees(700, "15478");
            dd.addSalary(1000);
            dd.showTotalSalary();
            dd.showTotalEmployee();
        } catch (LowSalaryException e) {
            System.out.println(e);
        } catch (IdCardException e) {
            System.out.println(e);
        } catch (HighSalaryException e) {
            System.out.println(e);
        } catch (NullException e) {
            System.out.println(e);
        } finally {
            System.out.println("程序结束");
        }

    }

}

拓展:

  • 在一个合法的 Java 源程序文件中定义了 3 个类,其中属性为 public 的类只能有1个。

  • 重载方法返回值类型可以不同。

  • char 类型 + 1 实际上是ASCII 码 + 1 。

  • if (x++ == y) 中先执行 x==y 再执行 ++ 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值