欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异常—throw/throws/自定义异常

程序员文章站 2022-07-14 10:27:44
...

1、throw关键字

(让一个异常生效,影响程序的编译或运行)

如果希望某一个异常对象生效(可以影响程序的编译、运行),需要用关键字throw进行异常的抛出

其实每一个异常都是一个对象

public class KeyWords {
    private static void throwTest(){
        //实例化一个异常对象
        RuntimeException exception = new RuntimeException();
        //一个异常对象被实例化完成后,没有任何意义
        //如果想要一个异常对象生效(影响程序的编译或者运行),需要使用关键字throw,将这个异常抛出
        throw exception;(让一个异常生效,影响程序的编译或运行)
    }
}

2、throws关键字

1、用在方法的声明部分,写在参数列表的后面,方法体前面
2、如果定义在方法中,表示这个方法过程结束中,可能会遇到什么异常
3、定义在throws异常抛出类型的方法,在当前的方法中,可以不处理这个异常,由调用方处理
注解:throws的这两种含义在下面具体展现
//提示程序可能会出现异常
public class KeyWords {
    //在方法的后面加throws,是告诉调用方我这个方法可能会抛出异常,需要针对这个异常进行处理
    private static void throwsTest()throws RuntimeException{
        //实例化一个异常对象
        RuntimeException exception = new RuntimeException();
        //抛出异常
        throw exception;
    }
}
//谁调用方法谁处理异常
public class KeyWords {

    public static void main(String[] args)  {
        //在调用时处理异常
        try {
            throwsTest();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private static void throwsTest()throws Exception{
        //实例化一个异常对象
        Exception exception = new Exception();
        //抛出异常
        throw exception;
    }
}

3、异常使用的具体场景

//异常抛出后,代码会正常终止
public class Person {
    private String nmae;
    private int age;

    public void setNmae(String nmae) {
        this.nmae = nmae;
    }

    public void setAge(int age) {
        if (age > 0 && age <= 140){
            this.age = age;
        }else {
            //如果年龄不再合法的范围内,抛出异常,提示设置方
            throw new RuntimeException();
        }
    }
}
class Program{
    public static void main(String[] args) {
        //实例化Person对象
        Person xiaoming = new Person();
        //设置属性值
        xiaoming.setNmae("xiaoming");
        xiaoming.setAge(1000);
    }
}

4、自定义异常

1、使用异常,主要是为了处理一些重大的逻辑BUG。这些逻辑BUG可能会导致程序的崩溃。此时,可以使用异常机制,强迫修改这个BUG。
2、系统中,会提供很多异常类型。但是,异常类型提供的再多,也无法满足我们所有的需求,当我们需要的异常类型,系统没有提供的时候,此时我们就需要自定义异常了。
3、理论上,异常的类名可以定义。但是出于规范,一般会用以Exception作为结尾
//自定义一个运行时的异常
public class MyException extends RuntimeException{}
//调用
public class Program {
    public static void main(String[] args) {
        throw new MyException();
    }
}
//以上就是一个简单的自定义异常
//输出异常的描述原因
//自定义一个运行时的异常
public class MyException extends RuntimeException{
    //异常描述信息的定义
    public MyException(String message){
        super(message);
    }
}

//调用函数
public class Program {
    public static void main(String[] args) {
        //输出异常信息的原因
        MyException e = new MyException("这里是我自定义的异常");
        throw e;
    }
}

5、自定义异常案例

public class Student {
    private String name;
    private int score;

    public Student(String name,int score){
        this.setName(name);
        this.setScore(score);
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setScore(int score) {
        //范围校验:如果成绩在[0,100]的范围内,可以完成赋值
        //如果成绩不在范围内,抛出异常
        if (score > 100 || score < 0){
            throw new SoreException(score);
        }
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
}
public class SoreException extends RuntimeException {
    public SoreException(int score){
        super("错误成绩,合理的成绩范围应该是[0,100],你设置的成绩是"+score);
    }
}
public class Test {
    public static void main(String[] args) {
        //1、实例化一个student对象
        Student student = new Student("xiaoming",-10 );
        System.out.println(student);
    }
}
相关标签: java