笔记(十六):异常高级

    科技2024-11-09  5

    异常高级

    throw关键字异常的分类子类重写父类方法时throws规则自定义异常类使用自定义异常类

    throw关键字

    throws关键字表示一个方法中可能发生的异常类型 一个方法表明方法中可能抛出的异常类型后,调用它的方法可以处理这些可能发生的异常 方式如下:

    publi void dosome() throws IOException,NullPointerException{ }

    其中dosome是方法名,IOException,NullPointerException是可能发生的异常类型

    异常的分类

    Throwable: -Error:硬件中出现的异常 -Exception:程序级别的错误 -check异常(检查时异常)(随时随地检查)(必须要用try-catch块处理) -RuntiomeException(运行时异常)(不会随时随地检查)(不一定要处理)(因为太常见了,如果每一次都要进行try-catch块处理,就显得太繁琐了)

    子类重写父类方法时throws规则

    package com.tedu.exception; import java.io.IOException; /** * 重写的时候,子类抛出的异常范围要小于等于父类的异常范围 * @author Wildmess * */ public class ThrowsOverrideDemo { public static void main(String[] args) { } public void doSome() throws IOException,RuntimeException{ // // String str = null; // System.out.println(str.length()); } } class Son extends ThrowsOverrideDemo{ //子类异常范围等于父类中的异常范围 // public void doSome() throws IOException,RuntimeException{ // // } //子类异常范围小于父类中的异常范围 // public void doSome() throws IOException{ // // } // public void doSome() throws RuntimeException{ // // } // public void doSome() { // // } //子类异常范围大于父类中的异常范围,直接红线报错 // public void doSome() throws Exception{ // // } //子类抛出父类中没有声明的异常,直接红线,不允许 // public void doSome() throws SQLException{ // // } }

    自定义异常类

    有时候我们自己编写的程序需要一些异常,但是这种异常在JavaAPI中没有,那么就需要我们自己定义一个异常类,在需要时声明或抛出 通常情况下,需要注意到下面几点: 1.定义好类名,做到见名知意; 2.需要继承Exception(直接或间接都可以) 3.定义序列化版本号(避免出现警告) 4.重写Exception定义的所有构造方法

    package com.tedu.exception; /** * 自定义年龄不合法异常类 * * @author Wildmess * */ public class IllegaAgeException extends Exception{ private static final long serialVersionUID = 1L; public IllegaAgeException() { super(); } public IllegaAgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); } public IllegaAgeException(String message, Throwable cause) { super(message, cause); } public IllegaAgeException(String message) { super(message); } public IllegaAgeException(Throwable cause) { super(cause); } }

    使用自定义异常类

    package com.tedu.exception; public class Person { private String name; private int age; private char gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) throws IllegaAgeException { if(age<0 || age>150) { /* * 根据业务需要,可以在age值不符合要求时 * 主动抛出异常,表示程序中这样的赋值不被允许 * throw关键字 后面实例化一个异常对象,处理发生这个类型的异常 * 当前方法会在运行throw后终止,类似于return */ throw new IllegaAgeException("年龄不合法!"); } this.age = age; } public char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } }

    测试类中去处理年龄赋值发生的异常

    package com.tedu.exception; /** * 使用Person类演示自定义异常的使用、抛出、处理 * @author Wildmess * */ public class ThrowDemo { public static void main(String[] args) { Person p = new Person(); try { p.setAge(500); System.out.println("当前年龄:" + p.getAge() + "岁"); } catch (IllegaAgeException e) { e.printStackTrace(); } } }
    Processed: 0.018, SQL: 8