J2SE之手动抛出自定义异常
来源:互联网 发布:淘宝固话怎么网上缴费 编辑:程序博客网 时间:2024/04/27 07:07
1.手动抛出异常
手动抛出异常要用到throw、throws语句。
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.手动抛出自定义异常
Exception和Error类提供的内置异常不一定总能捕获程序中发生的所有错误。有时则需要创建用户自定义异常,这些异常都是Exception类的子类。
Exception类未定义自己的任何方法,但从Throwable类继承了其所有的方法。创建的任何用户自定义异常类都将具有该类的方法。
示例代码:
Java代码
- 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("传递了非法的数组长度!");
- }
- }
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("传递了非法的数组长度!");}}
演示结果图:
- J2SE之手动抛出自定义异常
- 手动抛出自定义异常!
- 手动控制抛出自定义异常demo
- 手动抛出异常
- java 手动抛出异常
- Java手动直接抛出异常
- 手动或主动抛出异常
- Java 原码、反码、补码,自定义的异常类,手动抛出异常。
- throws自定义抛出异常
- java 抛出自定义异常
- Dubbo抛出自定义异常
- iOS 【自定义 抛出异常】
- 自定义抛出异常
- js抛出自定义异常
- Dubbo抛出自定义异常
- 自定义抛出异常
- Java学习之自定义异常和抛出异常
- Java 自定义异常 异常抛出
- flex+webservice
- TreeSet用法
- 在Win7下将Sphinx安装成windows服务时碰到如下错误及服务器操作
- 每位开发人员都应铭记的10句编程谚语
- JavaScript学习--代码解释
- J2SE之手动抛出自定义异常
- C语言异或操作的妙用
- java第八章(2)抽象类
- 6410的裸机Boot终于移植成功了
- GTK+ 移植时出现问题
- 来自Chrome的圣诞祝福——圣诞树动画特效
- 2011中国软件测试从业人员调查活动火热进行中
- Shell 编程
- javascript之初步创建对象