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

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);
    }
}
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

山顶看数据

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值