throw
throw用于抛出具体异常类的对象,一般用于方法体中。
什么时候使用:当所写代码不满足某些条件致使程序无法运行时可以借助throw抛出一个异常对象提醒程序员。类似于Python的raise
public class Student {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if(age<150 && age>1) {
this.age = age;
}else {
throw new AgeException("age的范围是1——150");
//这里为什么不用输出语句呢?
//因为输出语句仅仅只是输出一句话,无法像抛出异常一样准确定位到代码出错的位置
}
}
}
throws
throws用于声明方法可能抛出的异常,其后面跟的是异常类,可以有多个(用逗号" , "间隔),throws只能用在方法声明的括号后面。
public class Test{
public static void show(int age) throws RuntimeException{//使用throws继续上抛
if(age<0 || age>150){
throw new RuntimeException("年龄范围是0-150");//这里throw抛出了一个运行时异常,没有使用try-catch处理,则需要使用throws继续上抛,如果这里被捕获了,则本方法参数列表后不用继续上抛
}
}
public static void main(String[] args){
try{
new Test.show(1000);
//这里选择了使用try-catch语句,这里还可以接着上抛。
//如果这里不进行任何操作的话,制台会报出异常,而且程序执行到这里不会继续执行,即不会输出OK;继续上抛之后也不会执行下面代码(多次上抛,每次上抛的异常类的范围需要是本类或者其父类)
}catch(RuntimeException e){
e.printStackTrace();
}
System.out.println("OK");
}
}
- throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法的声明中指明要抛出的异常;如果要捕获throw抛出的异常,则必须使用try-catch语句块;
- 如果方法中的代码或者方法中所调用的代码没有使用throw抛出异常类对象,则无需使用throws,否则throws抛出的异常类无效;即使用throws方法中的代码一定存在使用throw抛出异常对象的代码。
自定义异常
java中内置了很多可能在编程时出现的大部分异常。除此之外,用户可以使用一个类继承Exception类即可继承自定义类异常。
在程序中自定义类,大体上分为以下几个步骤:
- 创建自定义异常类
- 在方法中通过throw关键字抛出异常对象。
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕捉并处理异常,否则在方法的声明处通过throws指明要抛出给方法调用者的异常,继续进行下一步操作。
- 再出现异常的方法的调用者中捕获处理异常。
创建自定义异常。在项目中创建类MyException,该类继承Exception。
public class MyException extends Exception{ //创建自定义异常
public MyException(String ErrorExceptin){ //构造方法
super(ErrorExceptin); //父类构造方法
}
}
在项目中创建类TestException,在该类中创建一个带int型参数的方法Sum(),该方法参数是否小于0或大于20,通过throw关键字抛出一个MyException异常对象,并在main()中捕获异常。下面是代码实例。
public class TestException {
//定义方法,抛出异常
private static int Sum(int num1,int num2)throws MyException{
if(num1<0||num2<0){ //判断方法中参数是否满足条件
throw new MyException("输入参数为负数"); //错误信息
}
if(num1>20||num2>20){ //判断方法中参数是否满足条件
throw new MyException("输入参数大于20");//错误信息
}
return (num1+num2); //将两个数的和输出
}
public static void main(String []args){
try { //try代码块处理可能出现的异常
int result=Sum(22,23); //调用Sum()方法
System.out.println(result); //将Sum()方法的返回值输出
} catch (MyException e) {
// TODO: handle exception
System.out.println(e); //输出异常信息
}
}
}