Java中throw和throws的区别

throw是语句抛出一个异常,一般是在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出某种特定类型的异常。
throws是方法可能抛出异常的声明

throw关键字

首先创建一个Person类

public class Person {
	private int age;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

然后在主方法中new一个Person对象

Person p = new Person();

给p的年龄赋值

p.setAge(10);

这样输出年龄是没有问题的
在这里插入图片描述
但是如果有用户给年龄赋值为1000——如果没有异常处理机制时,这样赋值也是没有问题的,但是在现实生活中,没有人的年龄可以是1000岁,这时候就需要我们在Person类中的setAge()方法中设置异常处理机制

public void setAge(int age)  {
		if(age<0 || age>100){
			throw new RuntimeException("年龄不合法");
		}
		this.age = age;
	}

这时在主方法中给p的年龄赋值为1000时,就会报错。
在这里插入图片描述
因为主方法不知道setAge()方法中报了这个异常,导致虚拟机不能把这个程序执行到底。所以我们需要在setAge()方法里向上层报这个异常,这时就需要用到***throws***关键字

throws

作用:向调用它的上层说明,调用此方法可能会报错。

public void setAge(int age) throws Exception {
		//通知上层这个方法会报错,用throws关键字
		if(age<0 || age>100){
			throw new Exception("年龄不合法");
			//除了RuntimeException可以不通知上层,其他异常都需要写上throws
			//抛什么异常就throws什么异常
		}
		this.age = age;
	}

这时在上层调用setAge()方法时便会报错,要求我们主动去处理这个异常:
在这里插入图片描述
改成:

try {
			p.setAge(1000);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}//语法上没有问题,但是业务逻辑上是不合理的

现在,主方法调用setAge()方法时处理了它可能报的错误,当程序运行时,尽管还是会报错,但是虚拟机可以把这个程序完整地执行到底。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值