Java中throw/throws关键字与自定义异常

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);				//输出异常信息
	}
}
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值