Java基础(七) -- 异常处理

try-catch-finally

  • 快捷键:ctrl+alt+t 选6

throws 异常

  • throws 抛出异常让调用该方法的用户去处理该异常
  • throws 后面可以更多个异常,使用,连接
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;

    public class Exception01 {

    public static void main(String[] args) {

    Demo d = new Demo();
    try {
    // 抛出的编译异常必须处理
    d.say();
    } catch (Exception e) {
    throw new RuntimeException(e);
    }

    // 抛出的运行时异常不必显示处理,方法后面默认有一个throws
    d.talk();
    }
    }

    class Demo {
    // 或者 throws Exception
    // 这是抛出的编译时异常
    public void say() throws FileNotFoundException {
    FileInputStream file = new FileInputStream("D:\\test.txt");
    }

    // 抛出的运行时异常
    public void talk() throws ClassFormatError {

    }
    }
  • 细节
  1. 对于编译异常必须处理,例如try-catch 或者 throws
  2. 对于运行时异常,程序中没有处理的,默认使用throws的方式处理
  3. 子类重写父类方法时,子类抛出的异常类型要么和父类抛出的一样,要么是父类抛出异常的子类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Father{
    public void method() throws RuntimeException{

    }
    }

    class Son extends Father{
    @Override
    public void method() throws ArithmeticException {
    super.method();
    }
    }
  4. 如果有try-catch处理的情况下就不用使用throws
  5. 对于throws抛出的运行时异常并不需要显示处理,编译不会报错

自定义异常

  • 继承类分析
    1. 继承 Exception 实现的是编辑异常
    2. 继承 RuntimeException 实现的是运行时异常
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class CustomException {
public static void main(String[] args) {
int age = 180;
if (!(age >= 18 && age <= 120)){
throw new AgeException("年龄范围不正确");
}
}
}

// 继承 Exception 实现的是编辑异常
// 继承 RuntimeException 实现的是运行时异常
class AgeException extends RuntimeException{
public AgeException(String message) {
super(message);
}
}