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 &#61; nmae;}public void setAge(int age) {if (age > 0 && age <&#61; 140){this.age &#61; age;}else {//如果年龄不再合法的范围内&#xff0c;抛出异常&#xff0c;提示设置方throw new RuntimeException();}}
}
class Program{public static void main(String[] args) {//实例化Person对象Person xiaoming &#61; new Person();//设置属性值xiaoming.setNmae("xiaoming");xiaoming.setAge(1000);}
}
4、自定义异常
1、使用异常&#xff0c;主要是为了处理一些重大的逻辑BUG。这些逻辑BUG可能会导致程序的崩溃。此时&#xff0c;可以使用异常机制&#xff0c;强迫修改这个BUG。
2、系统中&#xff0c;会提供很多异常类型。但是&#xff0c;异常类型提供的再多&#xff0c;也无法满足我们所有的需求&#xff0c;当我们需要的异常类型&#xff0c;系统没有提供的时候&#xff0c;此时我们就需要自定义异常了。
3、理论上&#xff0c;异常的类名可以定义。但是出于规范&#xff0c;一般会用以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 &#61; 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 &#61; name;}public void setScore(int score) {//范围校验&#xff1a;如果成绩在[0&#xff0c;100]的范围内&#xff0c;可以完成赋值//如果成绩不在范围内&#xff0c;抛出异常if (score > 100 || score <0){throw new SoreException(score);}this.score &#61; score;}&#64;Overridepublic String toString() {return "Student{" &#43;"name&#61;&#39;" &#43; name &#43; &#39;\&#39;&#39; &#43;", score&#61;" &#43; score &#43;&#39;}&#39;;}
}
public class SoreException extends RuntimeException {public SoreException(int score){super("错误成绩&#xff0c;合理的成绩范围应该是[0&#xff0c;100]&#xff0c;你设置的成绩是"&#43;score);}
}
public class Test {public static void main(String[] args) {//1、实例化一个student对象Student student &#61; new Student("xiaoming",-10 );System.out.println(student);}
}