### 异常是 Java 处理错误(运行时错误)的机制,出现错误的地方,Java 会自动生成一个异常对象,该对象包含了异常的各种信息,并且抛出该对象,交给可以处理该错误的代码来进行处理。

### 异常类

最顶端的类是 Throwable,是所有异常类的根结点。

Throwable有两个直接子类:Error 和 Exception。

Error 表示系统错误,程序无法解决,Exception 指程序运行时出现的错误,程序可以处理,所有的异常类都存放在java.lang包中。

Error 常见的子类包括 VirtualMachineError、AWTError、IOError。

Exception 常见的子类主要包含 IOException 和 RuntimeException,IOException 存放在 java.io 包中,RuntimeException 存放在java.lang 包中。

IOException 的常用子类包括FileLockInterruptionException、FileNotFoundException、FilerException,这些异常通常都是在处理 IO 流进行文件传输时发生的错误。

RuntimeException 常用子类:

- ArithmeticException:表示数学运算异常。
- ClassNotFouneException:表示类未定义异常。
- IllegalArgumentException:表示参数格式错误异常。
- ArrayIndexOutOfBoundsException:表示数组下标越界异常。
- NullPointerException:表示空指针异常。
- NoSuchMethodException:表示方法未定义异常。
- NumberFormatException:表示将其他数据类型转为数值类型时的不匹配异常。

### 综合练习

使用本章所学知识,重点包括封装、继承、多态、抽象、接口来完成一个汽车查询系统。

需求描述:共有3种类型的汽车:小轿车、大巴车、卡车,其中小轿车是4座、大巴车是53座、卡车是2座,要求使用封装、继承、抽象来完成车辆的定义。

可以对汽车信息作出修改,卡车可以运货但是载重量不能超过12吨,使用自定义异常来处理错误,小轿车和大巴车没有此功能,要求使用接口来实现。

 

 MyException.java

public class MyException extends Exception {
    public MyException(String error) {
        super(error);
    }
}

 

Test.java

public class Test {
    public static void main(String[] args) throws Exception {
        test();
    }
    
    public static void test() throws Exception{
        String str = "Java";
        int num = Integer.parseInt(str);
    }
}

 

Test2.java

public class Test2 {
    public static void main(String[] args) {
        Test2 test2 = new Test2();
        try {
            System.out.println(test2.add("10"));
        } catch (MyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public int add(Object object) throws MyException {
        //判断object是否为整数
        if(object instanceof Integer) {
            int num = (int)object;
            return num++;
        }else {
            String error = "传入的参数不是整数类型";
            throw new MyException(error);
        }
    }
}

 

 

Bus.java

package demo;

public class Bus extends Car {

    public Bus(String name, String color) {
        super(name, color);
    }

    @Override
    public String seatNum() {
        // TODO Auto-generated method stub
        return "53座";
    }

}

 

Car.java

package demo;

public abstract class Car {
    private String name;
    private String color;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public abstract String seatNum();
    public Car(String name, String color) {
        super();
        this.name = name;
        this.color = color;
    }
}

 

CarException.java

package demo;

public class CarException extends Exception {
    public CarException(String error) {
        super(error);
    }
}

 

Container.java

package demo;

public interface Container {
    public int getweight();
}

 

Sedan.java

package demo;

public class Sedan extends Car {

    public Sedan(String name, String color) {
        super(name, color);
    }

    @Override
    public String seatNum() {
        // TODO Auto-generated method stub
        return "4座";
    }

}

 

Test.java

package demo;

import java.util.Scanner;

public class Test {
    private static Scanner scanner;
    private static Sedan sedan;
    private static Bus bus;
    private static Truck truck;
    private static Car[] cars;
    static {
        scanner = new Scanner(System.in);
        sedan = new Sedan("小轿车","黑色");
        bus = new Bus("大巴车","绿色");
        truck = new Truck("卡车","蓝色",2);
        cars = new Car[3];
        cars[0] = sedan;
        cars[1] = bus;
        cars[2] = truck;
    }
    
    public void showCars() {
        System.out.println("车辆名称\t\t车辆颜色\t\t座位数\t\t载重量");
        Car car = null;
        for(int i = 0; i < cars.length;i++) {
            car = cars[i];
            if(car instanceof Sedan) {
                Sedan sedan = (Sedan)car;
                System.out.println(sedan.getName()+"\t\t"+sedan.getColor()+"\t\t"+sedan.seatNum());
            }
            if(car instanceof Bus) {
                Bus bus = (Bus)car;
                System.out.println(bus.getName()+"\t\t"+bus.getColor()+"\t\t"+bus.seatNum());
            }
            if(car instanceof Truck) {
                Truck truck = (Truck)car;
                System.out.println(truck.getName()+"\t\t"+truck.getColor()+"\t\t"+truck.seatNum()+"\t\t"+truck.getweight());
            }
        }
    }
    public static void main(String[] args) {
        Test test = new Test();
        test.showCars();
    }
}

 

Truck.java

 

package demo;

public class Truck extends Car implements Container {
    private int weight;
    public Truck(String name,String color,int weigth) {
        super(name,color);
        this.weight = weigth;
    }
    @Override
    public String seatNum() {
        // TODO Auto-generated method stub
        return "2座";
    }

    @Override
    public int getweight() {
        // TODO Auto-generated method stub
        return this.weight;
    }

}

 

posted on 2019-07-11 20:18  HiJackykun  阅读(280)  评论(0编辑  收藏  举报