`
lzs2014193
  • 浏览: 25785 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

J2SE_手动抛出自定义异常

    博客分类:
  • Java
阅读更多

1.手动抛出异常

手动抛出异常要用到throwthrows语句。

 

throw语句:

用于显式地引发异常,执行流程将在throw语句后立即停止,因此不会执行下一个语句。

抛出异常后,系统会检查最近层的try块,看他是否有一个catch子句与Throwabel实例的类型相匹配。

如果找到匹配,控制权则转到该语句。如果未找到匹配则检查下一层try语句,此循环将继续直到执行完最外层的异常处理程序。

 

throws语句:

用于处理一个方法可能引发的多个异常,throws必须提供异常列表及方法定义。

假设x()方法调用另一个方法y(),如果方法y()引发异常且该异常未得到处理,则调用法方法x()时必须遵从以下规则:

<1>声明x()方法,同时拥有try/catch语句块来捕获已抛出的异常

<2>如果x()方法没有try/catch块,则异常将传递给它自己的调用者,即调用x()方法的方法。要避免这种情况最好在x()方法中包含至少一个try/catch

 

2.手动抛出自定义异常

ExceptionError类提供的内置异常不一定总能捕获程序中发生的所有错误。有时则需要创建用户自定义异常,这些异常都是Exception类的子类。

Exception类未定义自己的任何方法,但从Throwable类继承了其所有的方法。创建的任何用户自定义异常类都将具有该类的方法。

 

示例代码:

 

package mypackage;

import java.util.Scanner;
/**
 * 手动抛出自定义异常示例
 * @author 眼镜哥哥
 */
public class ExceptionDemo {
	
	public ExceptionDemo(){}
	public static void main(String[] args) {
		new ExceptionDemo().demo();
	}
	public void demo(){
		Scanner s = new Scanner(System.in);
		System.out.print("请输入数组的长度:");
		String str = s.next();
		ExceptionClass ec = new ExceptionClass(str);
		s.close();
	}
}
class ExceptionClass{
	
	protected ExceptionClass(String size){
		try {
			this.checkSize(size);
		} catch (IllegalNumberException e) {
			System.out.println(e);
			new ExceptionDemo().demo();
		} catch (ArraySizeException e){
			System.out.println(e);
			new ExceptionDemo().demo();
		}
	}
	
	public void checkSize(String size) throws IllegalNumberException,ArraySizeException {
		if(size.matches("\\D")){
			throw new IllegalNumberException();
		}
		int num = Integer.parseInt(size);
		if(num<0){
			throw new ArraySizeException();
		}
		int[] array = new int[num];
		for (int i = 0; i < num; i++) {
			array[i] = i+1;
			System.out.println(array[i]);
		}
	}
}
class IllegalNumberException extends NumberFormatException{
	
	private static final long serialVersionUID = 1L;
	public IllegalNumberException() {
		super("输入的不是数字!");
	}
}
class ArraySizeException extends NegativeArraySizeException{
	
	private static final long serialVersionUID = 1L;
	public ArraySizeException() {
		super("传递了非法的数组长度!");
	}
}

 

 

演示结果图: 

 

  • 大小: 7.6 KB
分享到:
评论

相关推荐

    java异常处理,绝对值得你的关注

    4. throw关键字:用于手动抛出一个异常。这在你需要表示某种错误条件,但又不想让程序立即终止时非常有用。 5. throws关键字:用于声明方法可能会抛出的异常。如果一个方法可能会抛出异常,但在方法体内没有捕获它...

    j2se doc 中文版

    文档详细解释了异常的分类、如何抛出和捕获异常,以及如何自定义异常类。 6. **多线程编程**:Java 提供了丰富的多线程支持,包括线程的创建、同步、协作和管理。文档中有大量关于线程安全和并发编程的最佳实践。 ...

    Exception

    5. **throw和throws关键字**:`throw`用于手动抛出一个异常,而`throws`用于声明方法可能会抛出的异常。 6. **自定义异常**:通过继承`Exception`或其子类,程序员可以创建自己的异常类型,以更好地表达特定的错误...

    J2SE基础复习提纲

    - **异常抛出**: `throw`语句用于手动抛出异常,`throws`关键字用于声明可能抛出的异常。 - **异常处理**: `try-catch-finally`结构用于处理异常。`finally`块无论是否发生异常都会被执行,常用于资源释放等场景。 ...

    Java基础教程.md.pdf

    - `try`块中放置可能抛出异常的代码。 - `catch`块中处理异常。 ##### 13.2 Java异常体系(错误和异常) - 错误:一般不可恢复,如内存溢出。 - 异常:可预期且可处理的问题。 ##### 13.3 Java7多异常捕获 - 在一...

    java简答题答案.pdf

    Java是一种广泛使用的高级... - **throw**:手动抛出异常。 - **throws**:在方法声明中使用,表示方法可能抛出异常,由调用者处理。 以上是对Java语言关键知识点的详细阐述,涵盖了从基础概念到高级特性等多个方面。

    java范型学习

    如果存储的数据类型与预期不符,就会在运行时抛出`ClassCastException`。 泛型的引入解决了这些问题。现在,我们可以创建特定类型的`List`实例,如`List&lt;String&gt;`或`List&lt;Employee&gt;`,确保列表只能包含指定类型的...

Global site tag (gtag.js) - Google Analytics