Java 详述throw与throws

1.throw的用法
throw用于抛出异常对象;
①Test类

public class Test {
	
	public static void main(String[] args) {
		
		Student student = new Student();
		    student.setAge(100); 
	}
}

Student类

public void setAge(int age) {
		if(age>1&&age<20) {
			this.age = age;
			System.out.println(age);
		}else {
			System.out.println("年龄无效");
		}
	}

代码如果是这样,如果age=100, 那就会输出“年龄无效”;这个提示不能让人看到,到底多少符合要求,所以就有了throw。
将代码改成

public void setAge(int age) {
		if(age>1&&age<20) {
			this.age = age;
			System.out.println(age);
		}else {
			throw new AgeException("年龄无效");
		}
	}

创建一个自定义异常
在这里插入图片描述
如何自定义异常:创建继承Exception 或其子类的自定义类;自定义异常类调用父类构造函数(通常是含有一个String类型参数的构造函数);
代码如下:

package com.jd.exception;

public class AgeException extends RuntimeException{
	/**
	 * 
	 */
	private static final long serialVersionUID = -573493293922233554L;
    public AgeException(String message) {
		super(message);
	}
}

这样就把异常抛给调用者,使用throw抛出异常对象如果没有try-catch捕获该异常对象,则该抛出异常对象语句执行后其所在方法结束执行(在这个异常之后的方法体中的内容不再执行)。在Test类中就显示:
在这里插入图片描述
如果使用try-catch捕获异常

package com.jd.vo;

public class Test {
	
	public static void main(String[] args) {
		
		Student student = new Student();
		
		try{
			student.setAge(100);
		}catch(Exception e){
			System.out.println("aaaaaa");
			e.printStackTrace();
		}
	}
}

就会显示结果:
在这里插入图片描述
以上是运行时异常:①如果异常对象为运行时,则方法参数列表后面可以不使用throws,也可以将异常抛给方法调用者;调用者使用try-catch。
如果将AgeException继承的父类改了

package com.jd.exception;

public class AgeException extends Exception{

	/**
	 * 
	 */
	private static final long serialVersionUID = -1829894057306300522L;

	public AgeException(String message) {
		super(message);
	}
}

就是检查时异常:
②如果异常对象为检查时,则方法参数列表后面必须使用throws抛出创建该对象的类;如果没有throws 必须try-cacth
则有俩种改法:
1)使用throws抛出创建该异常对象的类
throws用于声明方法可能抛出的异常,其后为异常类,可以有多个,异常类之间用英文逗号间隔。

public void setAge(int age) throws AgeException,NullPointerException{
		if(age>1&&age<20) {
			this.age = age;
			System.out.println(age);
		}else {
			throw new AgeException("年龄无效");
		}
}

这是抛出异常,则调用该方法的必须捕获异常

package com.jd.vo;

public class Test {
	
	public static void main(String[] args) {
		
		Student student = new Student();
		
		try{
			student.setAge(100);
		}catch(Exception e){
			System.out.println("aaaaaa");
			e.printStackTrace();
		}
	}
}

2)异常使用try-cacth

public void setAge(int age){
		if(age>1&&age<20) {
			this.age = age;
			System.out.println(age);
		}else {
			try{
				throw new AgeException("年龄无效");
			}catch(AgeException e){
				System.out.println("aaaaaa");
				e.printStackTrace();
			}
		}
}

调用该方法的,就可以不用再捕获异常了。
2.总结:
①如果异常对象为运行时,则方法参数列表后面可以不使用throws,也可以将异常抛给方法调用者;调用者使用try-catch。
②如果异常对象为检查时,则方法参数列表后面必须使用throws抛出创建该对象的类;如果没有throws 必须try-cacth
3.throw与throws的区别:
①抛出的东西不同:throw抛出的是具体的异常对象,而throws抛出的是抽象的异常类;
②使用位置不同:throw一般用在方法体中,也可用在代码块中,但是如果抛出的是检查时异常类创建的对象,则必须使用try-catch自行处理;throws只能用在方法声明括号后面。(代码块中的异常,只能使用try-catch)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值