异常—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);
}
}