欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

详述throw和throws

程序员文章站 2022-05-05 09:03:45
...

一、自定义异常类与throw

1、什么是自定义异常类?什么时候需要自定义异常类?

public class Student {

	private int age;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		if (1<=age && age<=150) {
			this.age = age;
		}else {
				System.out.println("age范围1~150!");
		}
	}
}
public class Test {

	public static void main(String[] args) {
		Student stu = new Student();
		stu.setAge(1000);
		System.out.println(stu.getAge());
	}
}

上述代码定义一个学生类,类属性有age,因为年龄大小一般为0~150,所以在setAge方法中加判断语句给以警示。在执行Test中的main方法时显然会得到:
详述throw和throws
但是这种输出仅仅是输出一句话,无法像抛出异常那样能准确定位到代码出错的位置!有一种更加便利的方法来提醒程序员,就是自定义异常类。

//1、定义一个类,继承异常类以后,若继承或间接继承的是RuntimeException则为运行时异常,否则为检查时异常
public class AgeException extends RuntimeException {

	//2、定义构造方法,调用父类有参构造方法,显示信息
	public AgeException(String message) {
		super(message);
	}	
}

上述代码定义了一个异常类,该异常类继承与RuntimeException,它也为运行时异常,不用显式处理。我们将Student类中的setAge方法改为:

public void setAge(int age){
		if (1<=age && age<=150) {
			this.age = age;
		}else {
			throw new AgeException("age范围1~150!");
		}
	}

运行结果:详述throw和throws
一目了然,不仅能看到提示信息,而且根据异常名能知道什么出了异常,以及该去哪找。
也可以得到throw抛出的是对象,且用在方法体内或是代码块中使用。
throw抛出的异常处理方法:

  1. 直接使用try-catch包裹throw语句
  2. throw所在方法体没有处理,抛给创建该异常的异常类
public void setAge(int age) throws AgeException{
}

当然如果该异常属于运行时异常也可不用处理。

  1. 使用try-catch包裹含有throw语句的方法。

二、throws

throws一般用于抛出检查时异常,throws抛出的是类,如果有多个类在类之间加逗号隔开,throws只在参数列表后使用。
有如下代码:

public class Test{
	
	public static void show(int age) throws PrinterException{
		if(age<0||age>150){
			try {
				throw new PrinterException(“操作失败:年龄取值范围为0~150);
			} catch (PrinterException e) {
				System.out.println("show方法");
				e.printStackTrace();
			}
			return;
		}
		System.out.println(age);
	}
	public static void main(String[] args) {
		try {
			show(1000);
		} catch (PrinterException e) {
			System.out.println("main方法");
			e.printStackTrace();
		}
	}
}

运行结果入下:详述throw和throws因为throw new PrinterException(“操作失败:年龄取值范围为0~150”);此处异常已经使用try-catch处理,所以定义show方法的参数列表后的throws PrinterException没有起作用,也就是在main方法中show(1000);没有出现异常,main方法中的catch没有执行,符合上述执行结果。

相关标签: throw throws